genesis-flow 1.0.0__py3-none-any.whl

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.
Files changed (645) hide show
  1. genesis_flow-1.0.0.dist-info/METADATA +822 -0
  2. genesis_flow-1.0.0.dist-info/RECORD +645 -0
  3. genesis_flow-1.0.0.dist-info/WHEEL +5 -0
  4. genesis_flow-1.0.0.dist-info/entry_points.txt +19 -0
  5. genesis_flow-1.0.0.dist-info/licenses/LICENSE.txt +202 -0
  6. genesis_flow-1.0.0.dist-info/top_level.txt +1 -0
  7. mlflow/__init__.py +367 -0
  8. mlflow/__main__.py +3 -0
  9. mlflow/ag2/__init__.py +56 -0
  10. mlflow/ag2/ag2_logger.py +294 -0
  11. mlflow/anthropic/__init__.py +40 -0
  12. mlflow/anthropic/autolog.py +129 -0
  13. mlflow/anthropic/chat.py +144 -0
  14. mlflow/artifacts/__init__.py +268 -0
  15. mlflow/autogen/__init__.py +144 -0
  16. mlflow/autogen/chat.py +142 -0
  17. mlflow/azure/__init__.py +26 -0
  18. mlflow/azure/auth_handler.py +257 -0
  19. mlflow/azure/client.py +319 -0
  20. mlflow/azure/config.py +120 -0
  21. mlflow/azure/connection_factory.py +340 -0
  22. mlflow/azure/exceptions.py +27 -0
  23. mlflow/azure/stores.py +327 -0
  24. mlflow/azure/utils.py +183 -0
  25. mlflow/bedrock/__init__.py +45 -0
  26. mlflow/bedrock/_autolog.py +202 -0
  27. mlflow/bedrock/chat.py +122 -0
  28. mlflow/bedrock/stream.py +160 -0
  29. mlflow/bedrock/utils.py +43 -0
  30. mlflow/cli.py +707 -0
  31. mlflow/client.py +12 -0
  32. mlflow/config/__init__.py +56 -0
  33. mlflow/crewai/__init__.py +79 -0
  34. mlflow/crewai/autolog.py +253 -0
  35. mlflow/crewai/chat.py +29 -0
  36. mlflow/data/__init__.py +75 -0
  37. mlflow/data/artifact_dataset_sources.py +170 -0
  38. mlflow/data/code_dataset_source.py +40 -0
  39. mlflow/data/dataset.py +123 -0
  40. mlflow/data/dataset_registry.py +168 -0
  41. mlflow/data/dataset_source.py +110 -0
  42. mlflow/data/dataset_source_registry.py +219 -0
  43. mlflow/data/delta_dataset_source.py +167 -0
  44. mlflow/data/digest_utils.py +108 -0
  45. mlflow/data/evaluation_dataset.py +562 -0
  46. mlflow/data/filesystem_dataset_source.py +81 -0
  47. mlflow/data/http_dataset_source.py +145 -0
  48. mlflow/data/huggingface_dataset.py +258 -0
  49. mlflow/data/huggingface_dataset_source.py +118 -0
  50. mlflow/data/meta_dataset.py +104 -0
  51. mlflow/data/numpy_dataset.py +223 -0
  52. mlflow/data/pandas_dataset.py +231 -0
  53. mlflow/data/polars_dataset.py +352 -0
  54. mlflow/data/pyfunc_dataset_mixin.py +31 -0
  55. mlflow/data/schema.py +76 -0
  56. mlflow/data/sources.py +1 -0
  57. mlflow/data/spark_dataset.py +406 -0
  58. mlflow/data/spark_dataset_source.py +74 -0
  59. mlflow/data/spark_delta_utils.py +118 -0
  60. mlflow/data/tensorflow_dataset.py +350 -0
  61. mlflow/data/uc_volume_dataset_source.py +81 -0
  62. mlflow/db.py +27 -0
  63. mlflow/dspy/__init__.py +17 -0
  64. mlflow/dspy/autolog.py +197 -0
  65. mlflow/dspy/callback.py +398 -0
  66. mlflow/dspy/constant.py +1 -0
  67. mlflow/dspy/load.py +93 -0
  68. mlflow/dspy/save.py +393 -0
  69. mlflow/dspy/util.py +109 -0
  70. mlflow/dspy/wrapper.py +226 -0
  71. mlflow/entities/__init__.py +104 -0
  72. mlflow/entities/_mlflow_object.py +52 -0
  73. mlflow/entities/assessment.py +545 -0
  74. mlflow/entities/assessment_error.py +80 -0
  75. mlflow/entities/assessment_source.py +141 -0
  76. mlflow/entities/dataset.py +92 -0
  77. mlflow/entities/dataset_input.py +51 -0
  78. mlflow/entities/dataset_summary.py +62 -0
  79. mlflow/entities/document.py +48 -0
  80. mlflow/entities/experiment.py +109 -0
  81. mlflow/entities/experiment_tag.py +35 -0
  82. mlflow/entities/file_info.py +45 -0
  83. mlflow/entities/input_tag.py +35 -0
  84. mlflow/entities/lifecycle_stage.py +35 -0
  85. mlflow/entities/logged_model.py +228 -0
  86. mlflow/entities/logged_model_input.py +26 -0
  87. mlflow/entities/logged_model_output.py +32 -0
  88. mlflow/entities/logged_model_parameter.py +46 -0
  89. mlflow/entities/logged_model_status.py +74 -0
  90. mlflow/entities/logged_model_tag.py +33 -0
  91. mlflow/entities/metric.py +200 -0
  92. mlflow/entities/model_registry/__init__.py +29 -0
  93. mlflow/entities/model_registry/_model_registry_entity.py +13 -0
  94. mlflow/entities/model_registry/model_version.py +243 -0
  95. mlflow/entities/model_registry/model_version_deployment_job_run_state.py +44 -0
  96. mlflow/entities/model_registry/model_version_deployment_job_state.py +70 -0
  97. mlflow/entities/model_registry/model_version_search.py +25 -0
  98. mlflow/entities/model_registry/model_version_stages.py +25 -0
  99. mlflow/entities/model_registry/model_version_status.py +35 -0
  100. mlflow/entities/model_registry/model_version_tag.py +35 -0
  101. mlflow/entities/model_registry/prompt.py +73 -0
  102. mlflow/entities/model_registry/prompt_version.py +244 -0
  103. mlflow/entities/model_registry/registered_model.py +175 -0
  104. mlflow/entities/model_registry/registered_model_alias.py +35 -0
  105. mlflow/entities/model_registry/registered_model_deployment_job_state.py +39 -0
  106. mlflow/entities/model_registry/registered_model_search.py +25 -0
  107. mlflow/entities/model_registry/registered_model_tag.py +35 -0
  108. mlflow/entities/multipart_upload.py +74 -0
  109. mlflow/entities/param.py +49 -0
  110. mlflow/entities/run.py +97 -0
  111. mlflow/entities/run_data.py +84 -0
  112. mlflow/entities/run_info.py +188 -0
  113. mlflow/entities/run_inputs.py +59 -0
  114. mlflow/entities/run_outputs.py +43 -0
  115. mlflow/entities/run_status.py +41 -0
  116. mlflow/entities/run_tag.py +36 -0
  117. mlflow/entities/source_type.py +31 -0
  118. mlflow/entities/span.py +774 -0
  119. mlflow/entities/span_event.py +96 -0
  120. mlflow/entities/span_status.py +102 -0
  121. mlflow/entities/trace.py +317 -0
  122. mlflow/entities/trace_data.py +71 -0
  123. mlflow/entities/trace_info.py +220 -0
  124. mlflow/entities/trace_info_v2.py +162 -0
  125. mlflow/entities/trace_location.py +173 -0
  126. mlflow/entities/trace_state.py +39 -0
  127. mlflow/entities/trace_status.py +68 -0
  128. mlflow/entities/view_type.py +51 -0
  129. mlflow/environment_variables.py +866 -0
  130. mlflow/evaluation/__init__.py +16 -0
  131. mlflow/evaluation/assessment.py +369 -0
  132. mlflow/evaluation/evaluation.py +411 -0
  133. mlflow/evaluation/evaluation_tag.py +61 -0
  134. mlflow/evaluation/fluent.py +48 -0
  135. mlflow/evaluation/utils.py +201 -0
  136. mlflow/exceptions.py +213 -0
  137. mlflow/experiments.py +140 -0
  138. mlflow/gemini/__init__.py +81 -0
  139. mlflow/gemini/autolog.py +186 -0
  140. mlflow/gemini/chat.py +261 -0
  141. mlflow/genai/__init__.py +71 -0
  142. mlflow/genai/datasets/__init__.py +67 -0
  143. mlflow/genai/datasets/evaluation_dataset.py +131 -0
  144. mlflow/genai/evaluation/__init__.py +3 -0
  145. mlflow/genai/evaluation/base.py +411 -0
  146. mlflow/genai/evaluation/constant.py +23 -0
  147. mlflow/genai/evaluation/utils.py +244 -0
  148. mlflow/genai/judges/__init__.py +21 -0
  149. mlflow/genai/judges/databricks.py +404 -0
  150. mlflow/genai/label_schemas/__init__.py +153 -0
  151. mlflow/genai/label_schemas/label_schemas.py +209 -0
  152. mlflow/genai/labeling/__init__.py +159 -0
  153. mlflow/genai/labeling/labeling.py +250 -0
  154. mlflow/genai/optimize/__init__.py +13 -0
  155. mlflow/genai/optimize/base.py +198 -0
  156. mlflow/genai/optimize/optimizers/__init__.py +4 -0
  157. mlflow/genai/optimize/optimizers/base_optimizer.py +38 -0
  158. mlflow/genai/optimize/optimizers/dspy_mipro_optimizer.py +221 -0
  159. mlflow/genai/optimize/optimizers/dspy_optimizer.py +91 -0
  160. mlflow/genai/optimize/optimizers/utils/dspy_mipro_callback.py +76 -0
  161. mlflow/genai/optimize/optimizers/utils/dspy_mipro_utils.py +18 -0
  162. mlflow/genai/optimize/types.py +75 -0
  163. mlflow/genai/optimize/util.py +30 -0
  164. mlflow/genai/prompts/__init__.py +206 -0
  165. mlflow/genai/scheduled_scorers.py +431 -0
  166. mlflow/genai/scorers/__init__.py +26 -0
  167. mlflow/genai/scorers/base.py +492 -0
  168. mlflow/genai/scorers/builtin_scorers.py +765 -0
  169. mlflow/genai/scorers/scorer_utils.py +138 -0
  170. mlflow/genai/scorers/validation.py +165 -0
  171. mlflow/genai/utils/data_validation.py +146 -0
  172. mlflow/genai/utils/enum_utils.py +23 -0
  173. mlflow/genai/utils/trace_utils.py +211 -0
  174. mlflow/groq/__init__.py +42 -0
  175. mlflow/groq/_groq_autolog.py +74 -0
  176. mlflow/johnsnowlabs/__init__.py +888 -0
  177. mlflow/langchain/__init__.py +24 -0
  178. mlflow/langchain/api_request_parallel_processor.py +330 -0
  179. mlflow/langchain/autolog.py +147 -0
  180. mlflow/langchain/chat_agent_langgraph.py +340 -0
  181. mlflow/langchain/constant.py +1 -0
  182. mlflow/langchain/constants.py +1 -0
  183. mlflow/langchain/databricks_dependencies.py +444 -0
  184. mlflow/langchain/langchain_tracer.py +597 -0
  185. mlflow/langchain/model.py +919 -0
  186. mlflow/langchain/output_parsers.py +142 -0
  187. mlflow/langchain/retriever_chain.py +153 -0
  188. mlflow/langchain/runnables.py +527 -0
  189. mlflow/langchain/utils/chat.py +402 -0
  190. mlflow/langchain/utils/logging.py +671 -0
  191. mlflow/langchain/utils/serialization.py +36 -0
  192. mlflow/legacy_databricks_cli/__init__.py +0 -0
  193. mlflow/legacy_databricks_cli/configure/__init__.py +0 -0
  194. mlflow/legacy_databricks_cli/configure/provider.py +482 -0
  195. mlflow/litellm/__init__.py +175 -0
  196. mlflow/llama_index/__init__.py +22 -0
  197. mlflow/llama_index/autolog.py +55 -0
  198. mlflow/llama_index/chat.py +43 -0
  199. mlflow/llama_index/constant.py +1 -0
  200. mlflow/llama_index/model.py +577 -0
  201. mlflow/llama_index/pyfunc_wrapper.py +332 -0
  202. mlflow/llama_index/serialize_objects.py +188 -0
  203. mlflow/llama_index/tracer.py +561 -0
  204. mlflow/metrics/__init__.py +479 -0
  205. mlflow/metrics/base.py +39 -0
  206. mlflow/metrics/genai/__init__.py +25 -0
  207. mlflow/metrics/genai/base.py +101 -0
  208. mlflow/metrics/genai/genai_metric.py +771 -0
  209. mlflow/metrics/genai/metric_definitions.py +450 -0
  210. mlflow/metrics/genai/model_utils.py +371 -0
  211. mlflow/metrics/genai/prompt_template.py +68 -0
  212. mlflow/metrics/genai/prompts/__init__.py +0 -0
  213. mlflow/metrics/genai/prompts/v1.py +422 -0
  214. mlflow/metrics/genai/utils.py +6 -0
  215. mlflow/metrics/metric_definitions.py +619 -0
  216. mlflow/mismatch.py +34 -0
  217. mlflow/mistral/__init__.py +34 -0
  218. mlflow/mistral/autolog.py +71 -0
  219. mlflow/mistral/chat.py +135 -0
  220. mlflow/ml_package_versions.py +452 -0
  221. mlflow/models/__init__.py +97 -0
  222. mlflow/models/auth_policy.py +83 -0
  223. mlflow/models/cli.py +354 -0
  224. mlflow/models/container/__init__.py +294 -0
  225. mlflow/models/container/scoring_server/__init__.py +0 -0
  226. mlflow/models/container/scoring_server/nginx.conf +39 -0
  227. mlflow/models/dependencies_schemas.py +287 -0
  228. mlflow/models/display_utils.py +158 -0
  229. mlflow/models/docker_utils.py +211 -0
  230. mlflow/models/evaluation/__init__.py +23 -0
  231. mlflow/models/evaluation/_shap_patch.py +64 -0
  232. mlflow/models/evaluation/artifacts.py +194 -0
  233. mlflow/models/evaluation/base.py +1811 -0
  234. mlflow/models/evaluation/calibration_curve.py +109 -0
  235. mlflow/models/evaluation/default_evaluator.py +996 -0
  236. mlflow/models/evaluation/deprecated.py +23 -0
  237. mlflow/models/evaluation/evaluator_registry.py +80 -0
  238. mlflow/models/evaluation/evaluators/classifier.py +704 -0
  239. mlflow/models/evaluation/evaluators/default.py +233 -0
  240. mlflow/models/evaluation/evaluators/regressor.py +96 -0
  241. mlflow/models/evaluation/evaluators/shap.py +296 -0
  242. mlflow/models/evaluation/lift_curve.py +178 -0
  243. mlflow/models/evaluation/utils/metric.py +123 -0
  244. mlflow/models/evaluation/utils/trace.py +179 -0
  245. mlflow/models/evaluation/validation.py +434 -0
  246. mlflow/models/flavor_backend.py +93 -0
  247. mlflow/models/flavor_backend_registry.py +53 -0
  248. mlflow/models/model.py +1639 -0
  249. mlflow/models/model_config.py +150 -0
  250. mlflow/models/notebook_resources/agent_evaluation_template.html +235 -0
  251. mlflow/models/notebook_resources/eval_with_dataset_example.py +22 -0
  252. mlflow/models/notebook_resources/eval_with_synthetic_example.py +22 -0
  253. mlflow/models/python_api.py +369 -0
  254. mlflow/models/rag_signatures.py +128 -0
  255. mlflow/models/resources.py +321 -0
  256. mlflow/models/signature.py +662 -0
  257. mlflow/models/utils.py +2054 -0
  258. mlflow/models/wheeled_model.py +280 -0
  259. mlflow/openai/__init__.py +57 -0
  260. mlflow/openai/_agent_tracer.py +364 -0
  261. mlflow/openai/api_request_parallel_processor.py +131 -0
  262. mlflow/openai/autolog.py +509 -0
  263. mlflow/openai/constant.py +1 -0
  264. mlflow/openai/model.py +824 -0
  265. mlflow/openai/utils/chat_schema.py +367 -0
  266. mlflow/optuna/__init__.py +3 -0
  267. mlflow/optuna/storage.py +646 -0
  268. mlflow/plugins/__init__.py +72 -0
  269. mlflow/plugins/base.py +358 -0
  270. mlflow/plugins/builtin/__init__.py +24 -0
  271. mlflow/plugins/builtin/pytorch_plugin.py +150 -0
  272. mlflow/plugins/builtin/sklearn_plugin.py +158 -0
  273. mlflow/plugins/builtin/transformers_plugin.py +187 -0
  274. mlflow/plugins/cli.py +321 -0
  275. mlflow/plugins/discovery.py +340 -0
  276. mlflow/plugins/manager.py +465 -0
  277. mlflow/plugins/registry.py +316 -0
  278. mlflow/plugins/templates/framework_plugin_template.py +329 -0
  279. mlflow/prompt/constants.py +20 -0
  280. mlflow/prompt/promptlab_model.py +197 -0
  281. mlflow/prompt/registry_utils.py +248 -0
  282. mlflow/promptflow/__init__.py +495 -0
  283. mlflow/protos/__init__.py +0 -0
  284. mlflow/protos/assessments_pb2.py +174 -0
  285. mlflow/protos/databricks_artifacts_pb2.py +489 -0
  286. mlflow/protos/databricks_filesystem_service_pb2.py +196 -0
  287. mlflow/protos/databricks_managed_catalog_messages_pb2.py +95 -0
  288. mlflow/protos/databricks_managed_catalog_service_pb2.py +86 -0
  289. mlflow/protos/databricks_pb2.py +267 -0
  290. mlflow/protos/databricks_trace_server_pb2.py +374 -0
  291. mlflow/protos/databricks_uc_registry_messages_pb2.py +1249 -0
  292. mlflow/protos/databricks_uc_registry_service_pb2.py +170 -0
  293. mlflow/protos/facet_feature_statistics_pb2.py +296 -0
  294. mlflow/protos/internal_pb2.py +77 -0
  295. mlflow/protos/mlflow_artifacts_pb2.py +336 -0
  296. mlflow/protos/model_registry_pb2.py +1073 -0
  297. mlflow/protos/scalapb/__init__.py +0 -0
  298. mlflow/protos/scalapb/scalapb_pb2.py +104 -0
  299. mlflow/protos/service_pb2.py +2600 -0
  300. mlflow/protos/unity_catalog_oss_messages_pb2.py +457 -0
  301. mlflow/protos/unity_catalog_oss_service_pb2.py +130 -0
  302. mlflow/protos/unity_catalog_prompt_messages_pb2.py +447 -0
  303. mlflow/protos/unity_catalog_prompt_messages_pb2_grpc.py +24 -0
  304. mlflow/protos/unity_catalog_prompt_service_pb2.py +164 -0
  305. mlflow/protos/unity_catalog_prompt_service_pb2_grpc.py +785 -0
  306. mlflow/py.typed +0 -0
  307. mlflow/pydantic_ai/__init__.py +57 -0
  308. mlflow/pydantic_ai/autolog.py +173 -0
  309. mlflow/pyfunc/__init__.py +3844 -0
  310. mlflow/pyfunc/_mlflow_pyfunc_backend_predict.py +61 -0
  311. mlflow/pyfunc/backend.py +523 -0
  312. mlflow/pyfunc/context.py +78 -0
  313. mlflow/pyfunc/dbconnect_artifact_cache.py +144 -0
  314. mlflow/pyfunc/loaders/__init__.py +7 -0
  315. mlflow/pyfunc/loaders/chat_agent.py +117 -0
  316. mlflow/pyfunc/loaders/chat_model.py +125 -0
  317. mlflow/pyfunc/loaders/code_model.py +31 -0
  318. mlflow/pyfunc/loaders/responses_agent.py +112 -0
  319. mlflow/pyfunc/mlserver.py +46 -0
  320. mlflow/pyfunc/model.py +1473 -0
  321. mlflow/pyfunc/scoring_server/__init__.py +604 -0
  322. mlflow/pyfunc/scoring_server/app.py +7 -0
  323. mlflow/pyfunc/scoring_server/client.py +146 -0
  324. mlflow/pyfunc/spark_model_cache.py +48 -0
  325. mlflow/pyfunc/stdin_server.py +44 -0
  326. mlflow/pyfunc/utils/__init__.py +3 -0
  327. mlflow/pyfunc/utils/data_validation.py +224 -0
  328. mlflow/pyfunc/utils/environment.py +22 -0
  329. mlflow/pyfunc/utils/input_converter.py +47 -0
  330. mlflow/pyfunc/utils/serving_data_parser.py +11 -0
  331. mlflow/pytorch/__init__.py +1171 -0
  332. mlflow/pytorch/_lightning_autolog.py +580 -0
  333. mlflow/pytorch/_pytorch_autolog.py +50 -0
  334. mlflow/pytorch/pickle_module.py +35 -0
  335. mlflow/rfunc/__init__.py +42 -0
  336. mlflow/rfunc/backend.py +134 -0
  337. mlflow/runs.py +89 -0
  338. mlflow/server/__init__.py +302 -0
  339. mlflow/server/auth/__init__.py +1224 -0
  340. mlflow/server/auth/__main__.py +4 -0
  341. mlflow/server/auth/basic_auth.ini +6 -0
  342. mlflow/server/auth/cli.py +11 -0
  343. mlflow/server/auth/client.py +537 -0
  344. mlflow/server/auth/config.py +34 -0
  345. mlflow/server/auth/db/__init__.py +0 -0
  346. mlflow/server/auth/db/cli.py +18 -0
  347. mlflow/server/auth/db/migrations/__init__.py +0 -0
  348. mlflow/server/auth/db/migrations/alembic.ini +110 -0
  349. mlflow/server/auth/db/migrations/env.py +76 -0
  350. mlflow/server/auth/db/migrations/versions/8606fa83a998_initial_migration.py +51 -0
  351. mlflow/server/auth/db/migrations/versions/__init__.py +0 -0
  352. mlflow/server/auth/db/models.py +67 -0
  353. mlflow/server/auth/db/utils.py +37 -0
  354. mlflow/server/auth/entities.py +165 -0
  355. mlflow/server/auth/logo.py +14 -0
  356. mlflow/server/auth/permissions.py +65 -0
  357. mlflow/server/auth/routes.py +18 -0
  358. mlflow/server/auth/sqlalchemy_store.py +263 -0
  359. mlflow/server/graphql/__init__.py +0 -0
  360. mlflow/server/graphql/autogenerated_graphql_schema.py +353 -0
  361. mlflow/server/graphql/graphql_custom_scalars.py +24 -0
  362. mlflow/server/graphql/graphql_errors.py +15 -0
  363. mlflow/server/graphql/graphql_no_batching.py +89 -0
  364. mlflow/server/graphql/graphql_schema_extensions.py +74 -0
  365. mlflow/server/handlers.py +3217 -0
  366. mlflow/server/prometheus_exporter.py +17 -0
  367. mlflow/server/validation.py +30 -0
  368. mlflow/shap/__init__.py +691 -0
  369. mlflow/sklearn/__init__.py +1994 -0
  370. mlflow/sklearn/utils.py +1041 -0
  371. mlflow/smolagents/__init__.py +66 -0
  372. mlflow/smolagents/autolog.py +139 -0
  373. mlflow/smolagents/chat.py +29 -0
  374. mlflow/store/__init__.py +10 -0
  375. mlflow/store/_unity_catalog/__init__.py +1 -0
  376. mlflow/store/_unity_catalog/lineage/__init__.py +1 -0
  377. mlflow/store/_unity_catalog/lineage/constants.py +2 -0
  378. mlflow/store/_unity_catalog/registry/__init__.py +6 -0
  379. mlflow/store/_unity_catalog/registry/prompt_info.py +75 -0
  380. mlflow/store/_unity_catalog/registry/rest_store.py +1740 -0
  381. mlflow/store/_unity_catalog/registry/uc_oss_rest_store.py +507 -0
  382. mlflow/store/_unity_catalog/registry/utils.py +121 -0
  383. mlflow/store/artifact/__init__.py +0 -0
  384. mlflow/store/artifact/artifact_repo.py +472 -0
  385. mlflow/store/artifact/artifact_repository_registry.py +154 -0
  386. mlflow/store/artifact/azure_blob_artifact_repo.py +275 -0
  387. mlflow/store/artifact/azure_data_lake_artifact_repo.py +295 -0
  388. mlflow/store/artifact/cli.py +141 -0
  389. mlflow/store/artifact/cloud_artifact_repo.py +332 -0
  390. mlflow/store/artifact/databricks_artifact_repo.py +729 -0
  391. mlflow/store/artifact/databricks_artifact_repo_resources.py +301 -0
  392. mlflow/store/artifact/databricks_logged_model_artifact_repo.py +93 -0
  393. mlflow/store/artifact/databricks_models_artifact_repo.py +216 -0
  394. mlflow/store/artifact/databricks_sdk_artifact_repo.py +134 -0
  395. mlflow/store/artifact/databricks_sdk_models_artifact_repo.py +97 -0
  396. mlflow/store/artifact/dbfs_artifact_repo.py +240 -0
  397. mlflow/store/artifact/ftp_artifact_repo.py +132 -0
  398. mlflow/store/artifact/gcs_artifact_repo.py +296 -0
  399. mlflow/store/artifact/hdfs_artifact_repo.py +209 -0
  400. mlflow/store/artifact/http_artifact_repo.py +218 -0
  401. mlflow/store/artifact/local_artifact_repo.py +142 -0
  402. mlflow/store/artifact/mlflow_artifacts_repo.py +94 -0
  403. mlflow/store/artifact/models_artifact_repo.py +259 -0
  404. mlflow/store/artifact/optimized_s3_artifact_repo.py +356 -0
  405. mlflow/store/artifact/presigned_url_artifact_repo.py +173 -0
  406. mlflow/store/artifact/r2_artifact_repo.py +70 -0
  407. mlflow/store/artifact/runs_artifact_repo.py +265 -0
  408. mlflow/store/artifact/s3_artifact_repo.py +330 -0
  409. mlflow/store/artifact/sftp_artifact_repo.py +141 -0
  410. mlflow/store/artifact/uc_volume_artifact_repo.py +76 -0
  411. mlflow/store/artifact/unity_catalog_models_artifact_repo.py +168 -0
  412. mlflow/store/artifact/unity_catalog_oss_models_artifact_repo.py +168 -0
  413. mlflow/store/artifact/utils/__init__.py +0 -0
  414. mlflow/store/artifact/utils/models.py +148 -0
  415. mlflow/store/db/__init__.py +0 -0
  416. mlflow/store/db/base_sql_model.py +3 -0
  417. mlflow/store/db/db_types.py +10 -0
  418. mlflow/store/db/utils.py +314 -0
  419. mlflow/store/db_migrations/__init__.py +0 -0
  420. mlflow/store/db_migrations/alembic.ini +74 -0
  421. mlflow/store/db_migrations/env.py +84 -0
  422. mlflow/store/db_migrations/versions/0584bdc529eb_add_cascading_deletion_to_datasets_from_experiments.py +88 -0
  423. mlflow/store/db_migrations/versions/0a8213491aaa_drop_duplicate_killed_constraint.py +49 -0
  424. mlflow/store/db_migrations/versions/0c779009ac13_add_deleted_time_field_to_runs_table.py +24 -0
  425. mlflow/store/db_migrations/versions/181f10493468_allow_nulls_for_metric_values.py +35 -0
  426. mlflow/store/db_migrations/versions/27a6a02d2cf1_add_model_version_tags_table.py +38 -0
  427. mlflow/store/db_migrations/versions/2b4d017a5e9b_add_model_registry_tables_to_db.py +77 -0
  428. mlflow/store/db_migrations/versions/2d6e25af4d3e_increase_max_param_val_length.py +33 -0
  429. mlflow/store/db_migrations/versions/3500859a5d39_add_model_aliases_table.py +50 -0
  430. mlflow/store/db_migrations/versions/39d1c3be5f05_add_is_nan_constraint_for_metrics_tables_if_necessary.py +41 -0
  431. mlflow/store/db_migrations/versions/400f98739977_add_logged_model_tables.py +123 -0
  432. mlflow/store/db_migrations/versions/4465047574b1_increase_max_dataset_schema_size.py +38 -0
  433. mlflow/store/db_migrations/versions/451aebb31d03_add_metric_step.py +35 -0
  434. mlflow/store/db_migrations/versions/5b0e9adcef9c_add_cascade_deletion_to_trace_tables_fk.py +40 -0
  435. mlflow/store/db_migrations/versions/6953534de441_add_step_to_inputs_table.py +25 -0
  436. mlflow/store/db_migrations/versions/728d730b5ebd_add_registered_model_tags_table.py +38 -0
  437. mlflow/store/db_migrations/versions/7ac759974ad8_update_run_tags_with_larger_limit.py +36 -0
  438. mlflow/store/db_migrations/versions/7f2a7d5fae7d_add_datasets_inputs_input_tags_tables.py +82 -0
  439. mlflow/store/db_migrations/versions/84291f40a231_add_run_link_to_model_version.py +26 -0
  440. mlflow/store/db_migrations/versions/867495a8f9d4_add_trace_tables.py +90 -0
  441. mlflow/store/db_migrations/versions/89d4b8295536_create_latest_metrics_table.py +169 -0
  442. mlflow/store/db_migrations/versions/90e64c465722_migrate_user_column_to_tags.py +64 -0
  443. mlflow/store/db_migrations/versions/97727af70f4d_creation_time_last_update_time_experiments.py +25 -0
  444. mlflow/store/db_migrations/versions/__init__.py +0 -0
  445. mlflow/store/db_migrations/versions/a8c4a736bde6_allow_nulls_for_run_id.py +27 -0
  446. mlflow/store/db_migrations/versions/acf3f17fdcc7_add_storage_location_field_to_model_.py +29 -0
  447. mlflow/store/db_migrations/versions/bd07f7e963c5_create_index_on_run_uuid.py +26 -0
  448. mlflow/store/db_migrations/versions/bda7b8c39065_increase_model_version_tag_value_limit.py +38 -0
  449. mlflow/store/db_migrations/versions/c48cb773bb87_reset_default_value_for_is_nan_in_metrics_table_for_mysql.py +41 -0
  450. mlflow/store/db_migrations/versions/cbc13b556ace_add_v3_trace_schema_columns.py +31 -0
  451. mlflow/store/db_migrations/versions/cc1f77228345_change_param_value_length_to_500.py +34 -0
  452. mlflow/store/db_migrations/versions/cfd24bdc0731_update_run_status_constraint_with_killed.py +78 -0
  453. mlflow/store/db_migrations/versions/df50e92ffc5e_add_experiment_tags_table.py +38 -0
  454. mlflow/store/db_migrations/versions/f5a4f2784254_increase_run_tag_value_limit.py +36 -0
  455. mlflow/store/entities/__init__.py +3 -0
  456. mlflow/store/entities/paged_list.py +18 -0
  457. mlflow/store/model_registry/__init__.py +10 -0
  458. mlflow/store/model_registry/abstract_store.py +1081 -0
  459. mlflow/store/model_registry/base_rest_store.py +44 -0
  460. mlflow/store/model_registry/databricks_workspace_model_registry_rest_store.py +37 -0
  461. mlflow/store/model_registry/dbmodels/__init__.py +0 -0
  462. mlflow/store/model_registry/dbmodels/models.py +206 -0
  463. mlflow/store/model_registry/file_store.py +1091 -0
  464. mlflow/store/model_registry/rest_store.py +481 -0
  465. mlflow/store/model_registry/sqlalchemy_store.py +1286 -0
  466. mlflow/store/tracking/__init__.py +23 -0
  467. mlflow/store/tracking/abstract_store.py +816 -0
  468. mlflow/store/tracking/dbmodels/__init__.py +0 -0
  469. mlflow/store/tracking/dbmodels/initial_models.py +243 -0
  470. mlflow/store/tracking/dbmodels/models.py +1073 -0
  471. mlflow/store/tracking/file_store.py +2438 -0
  472. mlflow/store/tracking/postgres_managed_identity.py +146 -0
  473. mlflow/store/tracking/rest_store.py +1131 -0
  474. mlflow/store/tracking/sqlalchemy_store.py +2785 -0
  475. mlflow/system_metrics/__init__.py +61 -0
  476. mlflow/system_metrics/metrics/__init__.py +0 -0
  477. mlflow/system_metrics/metrics/base_metrics_monitor.py +32 -0
  478. mlflow/system_metrics/metrics/cpu_monitor.py +23 -0
  479. mlflow/system_metrics/metrics/disk_monitor.py +21 -0
  480. mlflow/system_metrics/metrics/gpu_monitor.py +71 -0
  481. mlflow/system_metrics/metrics/network_monitor.py +34 -0
  482. mlflow/system_metrics/metrics/rocm_monitor.py +123 -0
  483. mlflow/system_metrics/system_metrics_monitor.py +198 -0
  484. mlflow/tracing/__init__.py +16 -0
  485. mlflow/tracing/assessment.py +356 -0
  486. mlflow/tracing/client.py +531 -0
  487. mlflow/tracing/config.py +125 -0
  488. mlflow/tracing/constant.py +105 -0
  489. mlflow/tracing/destination.py +81 -0
  490. mlflow/tracing/display/__init__.py +40 -0
  491. mlflow/tracing/display/display_handler.py +196 -0
  492. mlflow/tracing/export/async_export_queue.py +186 -0
  493. mlflow/tracing/export/inference_table.py +138 -0
  494. mlflow/tracing/export/mlflow_v3.py +137 -0
  495. mlflow/tracing/export/utils.py +70 -0
  496. mlflow/tracing/fluent.py +1417 -0
  497. mlflow/tracing/processor/base_mlflow.py +199 -0
  498. mlflow/tracing/processor/inference_table.py +175 -0
  499. mlflow/tracing/processor/mlflow_v3.py +47 -0
  500. mlflow/tracing/processor/otel.py +73 -0
  501. mlflow/tracing/provider.py +487 -0
  502. mlflow/tracing/trace_manager.py +200 -0
  503. mlflow/tracing/utils/__init__.py +616 -0
  504. mlflow/tracing/utils/artifact_utils.py +28 -0
  505. mlflow/tracing/utils/copy.py +55 -0
  506. mlflow/tracing/utils/environment.py +55 -0
  507. mlflow/tracing/utils/exception.py +21 -0
  508. mlflow/tracing/utils/once.py +35 -0
  509. mlflow/tracing/utils/otlp.py +63 -0
  510. mlflow/tracing/utils/processor.py +54 -0
  511. mlflow/tracing/utils/search.py +292 -0
  512. mlflow/tracing/utils/timeout.py +250 -0
  513. mlflow/tracing/utils/token.py +19 -0
  514. mlflow/tracing/utils/truncation.py +124 -0
  515. mlflow/tracing/utils/warning.py +76 -0
  516. mlflow/tracking/__init__.py +39 -0
  517. mlflow/tracking/_model_registry/__init__.py +1 -0
  518. mlflow/tracking/_model_registry/client.py +764 -0
  519. mlflow/tracking/_model_registry/fluent.py +853 -0
  520. mlflow/tracking/_model_registry/registry.py +67 -0
  521. mlflow/tracking/_model_registry/utils.py +251 -0
  522. mlflow/tracking/_tracking_service/__init__.py +0 -0
  523. mlflow/tracking/_tracking_service/client.py +883 -0
  524. mlflow/tracking/_tracking_service/registry.py +56 -0
  525. mlflow/tracking/_tracking_service/utils.py +275 -0
  526. mlflow/tracking/artifact_utils.py +179 -0
  527. mlflow/tracking/client.py +5900 -0
  528. mlflow/tracking/context/__init__.py +0 -0
  529. mlflow/tracking/context/abstract_context.py +35 -0
  530. mlflow/tracking/context/databricks_cluster_context.py +15 -0
  531. mlflow/tracking/context/databricks_command_context.py +15 -0
  532. mlflow/tracking/context/databricks_job_context.py +49 -0
  533. mlflow/tracking/context/databricks_notebook_context.py +41 -0
  534. mlflow/tracking/context/databricks_repo_context.py +43 -0
  535. mlflow/tracking/context/default_context.py +51 -0
  536. mlflow/tracking/context/git_context.py +32 -0
  537. mlflow/tracking/context/registry.py +98 -0
  538. mlflow/tracking/context/system_environment_context.py +15 -0
  539. mlflow/tracking/default_experiment/__init__.py +1 -0
  540. mlflow/tracking/default_experiment/abstract_context.py +43 -0
  541. mlflow/tracking/default_experiment/databricks_notebook_experiment_provider.py +44 -0
  542. mlflow/tracking/default_experiment/registry.py +75 -0
  543. mlflow/tracking/fluent.py +3595 -0
  544. mlflow/tracking/metric_value_conversion_utils.py +93 -0
  545. mlflow/tracking/multimedia.py +206 -0
  546. mlflow/tracking/registry.py +86 -0
  547. mlflow/tracking/request_auth/__init__.py +0 -0
  548. mlflow/tracking/request_auth/abstract_request_auth_provider.py +34 -0
  549. mlflow/tracking/request_auth/registry.py +60 -0
  550. mlflow/tracking/request_header/__init__.py +0 -0
  551. mlflow/tracking/request_header/abstract_request_header_provider.py +36 -0
  552. mlflow/tracking/request_header/databricks_request_header_provider.py +38 -0
  553. mlflow/tracking/request_header/default_request_header_provider.py +17 -0
  554. mlflow/tracking/request_header/registry.py +79 -0
  555. mlflow/transformers/__init__.py +2982 -0
  556. mlflow/transformers/flavor_config.py +258 -0
  557. mlflow/transformers/hub_utils.py +83 -0
  558. mlflow/transformers/llm_inference_utils.py +468 -0
  559. mlflow/transformers/model_io.py +301 -0
  560. mlflow/transformers/peft.py +51 -0
  561. mlflow/transformers/signature.py +183 -0
  562. mlflow/transformers/torch_utils.py +55 -0
  563. mlflow/types/__init__.py +21 -0
  564. mlflow/types/agent.py +270 -0
  565. mlflow/types/chat.py +240 -0
  566. mlflow/types/llm.py +935 -0
  567. mlflow/types/responses.py +139 -0
  568. mlflow/types/responses_helpers.py +416 -0
  569. mlflow/types/schema.py +1505 -0
  570. mlflow/types/type_hints.py +647 -0
  571. mlflow/types/utils.py +753 -0
  572. mlflow/utils/__init__.py +283 -0
  573. mlflow/utils/_capture_modules.py +256 -0
  574. mlflow/utils/_capture_transformers_modules.py +75 -0
  575. mlflow/utils/_spark_utils.py +201 -0
  576. mlflow/utils/_unity_catalog_oss_utils.py +97 -0
  577. mlflow/utils/_unity_catalog_utils.py +479 -0
  578. mlflow/utils/annotations.py +218 -0
  579. mlflow/utils/arguments_utils.py +16 -0
  580. mlflow/utils/async_logging/__init__.py +1 -0
  581. mlflow/utils/async_logging/async_artifacts_logging_queue.py +258 -0
  582. mlflow/utils/async_logging/async_logging_queue.py +366 -0
  583. mlflow/utils/async_logging/run_artifact.py +38 -0
  584. mlflow/utils/async_logging/run_batch.py +58 -0
  585. mlflow/utils/async_logging/run_operations.py +49 -0
  586. mlflow/utils/autologging_utils/__init__.py +737 -0
  587. mlflow/utils/autologging_utils/client.py +432 -0
  588. mlflow/utils/autologging_utils/config.py +33 -0
  589. mlflow/utils/autologging_utils/events.py +294 -0
  590. mlflow/utils/autologging_utils/logging_and_warnings.py +328 -0
  591. mlflow/utils/autologging_utils/metrics_queue.py +71 -0
  592. mlflow/utils/autologging_utils/safety.py +1104 -0
  593. mlflow/utils/autologging_utils/versioning.py +95 -0
  594. mlflow/utils/checkpoint_utils.py +206 -0
  595. mlflow/utils/class_utils.py +6 -0
  596. mlflow/utils/cli_args.py +257 -0
  597. mlflow/utils/conda.py +354 -0
  598. mlflow/utils/credentials.py +231 -0
  599. mlflow/utils/data_utils.py +17 -0
  600. mlflow/utils/databricks_utils.py +1436 -0
  601. mlflow/utils/docstring_utils.py +477 -0
  602. mlflow/utils/doctor.py +133 -0
  603. mlflow/utils/download_cloud_file_chunk.py +43 -0
  604. mlflow/utils/env_manager.py +16 -0
  605. mlflow/utils/env_pack.py +131 -0
  606. mlflow/utils/environment.py +1009 -0
  607. mlflow/utils/exception_utils.py +14 -0
  608. mlflow/utils/file_utils.py +978 -0
  609. mlflow/utils/git_utils.py +77 -0
  610. mlflow/utils/gorilla.py +797 -0
  611. mlflow/utils/import_hooks/__init__.py +363 -0
  612. mlflow/utils/lazy_load.py +51 -0
  613. mlflow/utils/logging_utils.py +168 -0
  614. mlflow/utils/mime_type_utils.py +58 -0
  615. mlflow/utils/mlflow_tags.py +103 -0
  616. mlflow/utils/model_utils.py +486 -0
  617. mlflow/utils/name_utils.py +346 -0
  618. mlflow/utils/nfs_on_spark.py +62 -0
  619. mlflow/utils/openai_utils.py +164 -0
  620. mlflow/utils/os.py +12 -0
  621. mlflow/utils/oss_registry_utils.py +29 -0
  622. mlflow/utils/plugins.py +17 -0
  623. mlflow/utils/process.py +182 -0
  624. mlflow/utils/promptlab_utils.py +146 -0
  625. mlflow/utils/proto_json_utils.py +743 -0
  626. mlflow/utils/pydantic_utils.py +54 -0
  627. mlflow/utils/request_utils.py +279 -0
  628. mlflow/utils/requirements_utils.py +704 -0
  629. mlflow/utils/rest_utils.py +673 -0
  630. mlflow/utils/search_logged_model_utils.py +127 -0
  631. mlflow/utils/search_utils.py +2111 -0
  632. mlflow/utils/secure_loading.py +221 -0
  633. mlflow/utils/security_validation.py +384 -0
  634. mlflow/utils/server_cli_utils.py +61 -0
  635. mlflow/utils/spark_utils.py +15 -0
  636. mlflow/utils/string_utils.py +138 -0
  637. mlflow/utils/thread_utils.py +63 -0
  638. mlflow/utils/time.py +54 -0
  639. mlflow/utils/timeout.py +42 -0
  640. mlflow/utils/uri.py +572 -0
  641. mlflow/utils/validation.py +662 -0
  642. mlflow/utils/virtualenv.py +458 -0
  643. mlflow/utils/warnings_utils.py +25 -0
  644. mlflow/utils/yaml_utils.py +179 -0
  645. mlflow/version.py +24 -0
@@ -0,0 +1,103 @@
1
+ """
2
+ File containing all of the run tags in the mlflow. namespace.
3
+
4
+ See the System Tags section in the MLflow Tracking documentation for information on the
5
+ meaning of these tags.
6
+ """
7
+
8
+ MLFLOW_EXPERIMENT_SOURCE_ID = "mlflow.experiment.sourceId"
9
+ MLFLOW_EXPERIMENT_SOURCE_TYPE = "mlflow.experiment.sourceType"
10
+ MLFLOW_RUN_NAME = "mlflow.runName"
11
+ MLFLOW_RUN_NOTE = "mlflow.note.content"
12
+ MLFLOW_PARENT_RUN_ID = "mlflow.parentRunId"
13
+ MLFLOW_ARTIFACT_LOCATION = "mlflow.artifactLocation"
14
+ MLFLOW_USER = "mlflow.user"
15
+ MLFLOW_SOURCE_TYPE = "mlflow.source.type"
16
+ MLFLOW_SOURCE_NAME = "mlflow.source.name"
17
+ MLFLOW_GIT_COMMIT = "mlflow.source.git.commit"
18
+ MLFLOW_GIT_BRANCH = "mlflow.source.git.branch"
19
+ MLFLOW_GIT_REPO_URL = "mlflow.source.git.repoURL"
20
+ MLFLOW_LOGGED_MODELS = "mlflow.log-model.history"
21
+ MLFLOW_MODEL_IS_EXTERNAL = "mlflow.model.isExternal"
22
+ MLFLOW_MODEL_VERSIONS = "mlflow.modelVersions"
23
+ MLFLOW_PROJECT_ENV = "mlflow.project.env"
24
+ MLFLOW_PROJECT_ENTRY_POINT = "mlflow.project.entryPoint"
25
+ MLFLOW_DOCKER_IMAGE_URI = "mlflow.docker.image.uri"
26
+ MLFLOW_DOCKER_IMAGE_ID = "mlflow.docker.image.id"
27
+ # Indicates that an MLflow run was created by an autologging integration
28
+ MLFLOW_AUTOLOGGING = "mlflow.autologging"
29
+ # Indicates the artifacts type and path that are logged
30
+ MLFLOW_LOGGED_ARTIFACTS = "mlflow.loggedArtifacts"
31
+ MLFLOW_LOGGED_IMAGES = "mlflow.loggedImages"
32
+ MLFLOW_RUN_SOURCE_TYPE = "mlflow.runSourceType"
33
+
34
+ MLFLOW_DATABRICKS_NOTEBOOK_ID = "mlflow.databricks.notebookID"
35
+ MLFLOW_DATABRICKS_NOTEBOOK_PATH = "mlflow.databricks.notebookPath"
36
+ MLFLOW_DATABRICKS_WEBAPP_URL = "mlflow.databricks.webappURL"
37
+ MLFLOW_DATABRICKS_RUN_URL = "mlflow.databricks.runURL"
38
+ MLFLOW_DATABRICKS_CLUSTER_ID = "mlflow.databricks.cluster.id"
39
+ MLFLOW_DATABRICKS_WORKSPACE_URL = "mlflow.databricks.workspaceURL"
40
+ MLFLOW_DATABRICKS_WORKSPACE_ID = "mlflow.databricks.workspaceID"
41
+ # The unique ID of a command execution in a Databricks notebook
42
+ MLFLOW_DATABRICKS_NOTEBOOK_COMMAND_ID = "mlflow.databricks.notebook.commandID"
43
+ # The SHELL_JOB_ID and SHELL_JOB_RUN_ID tags are used for tracking the
44
+ # Databricks Job ID and Databricks Job Run ID associated with an MLflow Project run
45
+ MLFLOW_DATABRICKS_SHELL_JOB_ID = "mlflow.databricks.shellJobID"
46
+ MLFLOW_DATABRICKS_SHELL_JOB_RUN_ID = "mlflow.databricks.shellJobRunID"
47
+ # The JOB_ID, JOB_RUN_ID, and JOB_TYPE tags are used for automatically recording Job information
48
+ # when MLflow Tracking APIs are used within a Databricks Job
49
+ MLFLOW_DATABRICKS_JOB_ID = "mlflow.databricks.jobID"
50
+ MLFLOW_DATABRICKS_JOB_RUN_ID = "mlflow.databricks.jobRunID"
51
+ # Here MLFLOW_DATABRICKS_JOB_TYPE means the job task type and MLFLOW_DATABRICKS_JOB_TYPE_INFO
52
+ # implies the job type which could be normal, ephemeral, etc.
53
+ MLFLOW_DATABRICKS_JOB_TYPE = "mlflow.databricks.jobType"
54
+ MLFLOW_DATABRICKS_JOB_TYPE_INFO = "mlflow.databricks.jobTypeInfo"
55
+ # For MLflow Repo Lineage tracking
56
+ MLFLOW_DATABRICKS_GIT_REPO_URL = "mlflow.databricks.gitRepoUrl"
57
+ MLFLOW_DATABRICKS_GIT_REPO_COMMIT = "mlflow.databricks.gitRepoCommit"
58
+ MLFLOW_DATABRICKS_GIT_REPO_PROVIDER = "mlflow.databricks.gitRepoProvider"
59
+ MLFLOW_DATABRICKS_GIT_REPO_RELATIVE_PATH = "mlflow.databricks.gitRepoRelativePath"
60
+ MLFLOW_DATABRICKS_GIT_REPO_REFERENCE = "mlflow.databricks.gitRepoReference"
61
+ MLFLOW_DATABRICKS_GIT_REPO_REFERENCE_TYPE = "mlflow.databricks.gitRepoReferenceType"
62
+ MLFLOW_DATABRICKS_GIT_REPO_STATUS = "mlflow.databricks.gitRepoStatus"
63
+
64
+ # Databricks model serving endpoint information
65
+ MLFLOW_DATABRICKS_MODEL_SERVING_ENDPOINT_NAME = "mlflow.databricks.modelServingEndpointName"
66
+
67
+ # For MLflow Dataset tracking
68
+ MLFLOW_DATASET_CONTEXT = "mlflow.data.context"
69
+
70
+ MLFLOW_PROJECT_BACKEND = "mlflow.project.backend"
71
+
72
+ MLFLOW_EXPERIMENT_PRIMARY_METRIC_NAME = "mlflow.experiment.primaryMetric.name"
73
+ MLFLOW_EXPERIMENT_PRIMARY_METRIC_GREATER_IS_BETTER = (
74
+ "mlflow.experiment.primaryMetric.greaterIsBetter"
75
+ )
76
+
77
+ # For automatic model checkpointing
78
+ LATEST_CHECKPOINT_ARTIFACT_TAG_KEY = "mlflow.latest_checkpoint_artifact"
79
+
80
+ # A set of tags that cannot be updated by the user
81
+ IMMUTABLE_TAGS = {MLFLOW_USER, MLFLOW_ARTIFACT_LOCATION}
82
+
83
+ # The list of tags generated from resolve_tags() that are required for tracing UI
84
+ TRACE_RESOLVE_TAGS_ALLOWLIST = (
85
+ MLFLOW_DATABRICKS_NOTEBOOK_COMMAND_ID,
86
+ MLFLOW_DATABRICKS_NOTEBOOK_ID,
87
+ MLFLOW_DATABRICKS_NOTEBOOK_PATH,
88
+ MLFLOW_DATABRICKS_WEBAPP_URL,
89
+ MLFLOW_DATABRICKS_WORKSPACE_ID,
90
+ MLFLOW_DATABRICKS_WORKSPACE_URL,
91
+ MLFLOW_SOURCE_NAME,
92
+ MLFLOW_SOURCE_TYPE,
93
+ MLFLOW_USER,
94
+ MLFLOW_GIT_COMMIT,
95
+ MLFLOW_GIT_BRANCH,
96
+ MLFLOW_GIT_REPO_URL,
97
+ )
98
+
99
+
100
+ def _get_run_name_from_tags(tags):
101
+ for tag in tags:
102
+ if tag.key == MLFLOW_RUN_NAME:
103
+ return tag.value
@@ -0,0 +1,486 @@
1
+ import contextlib
2
+ import json
3
+ import logging
4
+ import os
5
+ import shutil
6
+ import sys
7
+ from pathlib import Path
8
+ from typing import Any
9
+
10
+ import yaml
11
+
12
+ from mlflow.exceptions import MlflowException
13
+ from mlflow.models import Model
14
+ from mlflow.models.model import MLMODEL_FILE_NAME
15
+ from mlflow.protos.databricks_pb2 import (
16
+ INVALID_PARAMETER_VALUE,
17
+ RESOURCE_ALREADY_EXISTS,
18
+ RESOURCE_DOES_NOT_EXIST,
19
+ )
20
+ from mlflow.store.artifact.artifact_repository_registry import get_artifact_repository
21
+ from mlflow.store.artifact.models_artifact_repo import ModelsArtifactRepository
22
+ from mlflow.store.artifact.runs_artifact_repo import RunsArtifactRepository
23
+ from mlflow.tracking.artifact_utils import _download_artifact_from_uri
24
+ from mlflow.utils import get_parent_module
25
+ from mlflow.utils.databricks_utils import is_in_databricks_runtime
26
+ from mlflow.utils.file_utils import _copy_file_or_tree
27
+ from mlflow.utils.requirements_utils import _capture_imported_modules
28
+ from mlflow.utils.uri import append_to_uri_path
29
+
30
+ FLAVOR_CONFIG_CODE = "code"
31
+
32
+ _logger = logging.getLogger(__name__)
33
+
34
+
35
+ def _get_all_flavor_configurations(model_path):
36
+ """Obtains all the flavor configurations from the specified MLflow model path.
37
+
38
+ Args:
39
+ model_path: The path to the root directory of the MLflow model for which to load
40
+ the specified flavor configuration.
41
+
42
+ Returns:
43
+ The dictionary contains all flavor configurations with flavor name as key.
44
+
45
+ """
46
+
47
+ return Model.load(model_path).flavors
48
+
49
+
50
+ def _get_flavor_configuration(model_path, flavor_name):
51
+ """Obtains the configuration for the specified flavor from the specified
52
+ MLflow model path. If the model does not contain the specified flavor,
53
+ an exception will be thrown.
54
+
55
+ Args:
56
+ model_path: The path to the root directory of the MLflow model for which to load
57
+ the specified flavor configuration.
58
+ flavor_name: The name of the flavor configuration to load.
59
+
60
+ Returns:
61
+ The flavor configuration as a dictionary.
62
+
63
+ """
64
+ try:
65
+ return Model.load(model_path).flavors[flavor_name]
66
+ except KeyError as ex:
67
+ raise MlflowException(
68
+ f'Model does not have the "{flavor_name}" flavor', RESOURCE_DOES_NOT_EXIST
69
+ ) from ex
70
+
71
+
72
+ def _get_flavor_configuration_from_uri(model_uri, flavor_name, logger):
73
+ """Obtains the configuration for the specified flavor from the specified
74
+ MLflow model uri. If the model does not contain the specified flavor,
75
+ an exception will be thrown.
76
+
77
+ Args:
78
+ model_uri: The path to the root directory of the MLflow model for which to load
79
+ the specified flavor configuration.
80
+ flavor_name: The name of the flavor configuration to load.
81
+ logger: The local flavor's logger to report the resolved path of the model uri.
82
+
83
+ Returns:
84
+ The flavor configuration as a dictionary.
85
+ """
86
+ try:
87
+ resolved_uri = model_uri
88
+ if RunsArtifactRepository.is_runs_uri(model_uri):
89
+ resolved_uri = RunsArtifactRepository.get_underlying_uri(model_uri)
90
+ logger.info("'%s' resolved as '%s'", model_uri, resolved_uri)
91
+ elif ModelsArtifactRepository.is_models_uri(model_uri):
92
+ resolved_uri = ModelsArtifactRepository.get_underlying_uri(model_uri)
93
+ logger.info("'%s' resolved as '%s'", model_uri, resolved_uri)
94
+
95
+ try:
96
+ ml_model_file = _download_artifact_from_uri(
97
+ artifact_uri=append_to_uri_path(resolved_uri, MLMODEL_FILE_NAME)
98
+ )
99
+ except Exception:
100
+ logger.debug(
101
+ f'Failed to download an "{MLMODEL_FILE_NAME}" model file from '
102
+ f"resolved URI {resolved_uri}. "
103
+ f"Falling back to downloading from original model URI {model_uri}",
104
+ exc_info=True,
105
+ )
106
+ ml_model_file = get_artifact_repository(artifact_uri=model_uri).download_artifacts(
107
+ artifact_path=MLMODEL_FILE_NAME
108
+ )
109
+ except Exception as ex:
110
+ raise MlflowException(
111
+ f'Failed to download an "{MLMODEL_FILE_NAME}" model file from "{model_uri}"',
112
+ RESOURCE_DOES_NOT_EXIST,
113
+ ) from ex
114
+ return _get_flavor_configuration_from_ml_model_file(ml_model_file, flavor_name)
115
+
116
+
117
+ def _get_flavor_configuration_from_ml_model_file(ml_model_file, flavor_name):
118
+ model_conf = Model.load(ml_model_file)
119
+ if flavor_name not in model_conf.flavors:
120
+ raise MlflowException(
121
+ f'Model does not have the "{flavor_name}" flavor',
122
+ RESOURCE_DOES_NOT_EXIST,
123
+ )
124
+ return model_conf.flavors[flavor_name]
125
+
126
+
127
+ def _validate_code_paths(code_paths):
128
+ if code_paths is not None:
129
+ if not isinstance(code_paths, list):
130
+ raise TypeError(f"Argument code_paths should be a list, not {type(code_paths)}")
131
+
132
+
133
+ def _validate_and_copy_code_paths(code_paths, path, default_subpath="code"):
134
+ """Validates that a code path is a valid list and copies the code paths to a directory. This
135
+ can later be used to log custom code as an artifact.
136
+
137
+ Args:
138
+ code_paths: A list of files or directories containing code that should be logged
139
+ as artifacts.
140
+ path: The local model path.
141
+ default_subpath: The default directory name used to store code artifacts.
142
+ """
143
+ _validate_code_paths(code_paths)
144
+ if code_paths is not None:
145
+ code_dir_subpath = default_subpath
146
+ for code_path in code_paths:
147
+ try:
148
+ _copy_file_or_tree(src=code_path, dst=path, dst_dir=code_dir_subpath)
149
+ except OSError as e:
150
+ # A common error is code-paths includes Databricks Notebook. We include it in error
151
+ # message when running in Databricks, but not in other envs tp avoid confusion.
152
+ example = ", such as Databricks Notebooks" if is_in_databricks_runtime() else ""
153
+ raise MlflowException(
154
+ message=(
155
+ f"Failed to copy the specified code path '{code_path}' into the model "
156
+ "artifacts. It appears that your code path includes file(s) that cannot "
157
+ f"be copied{example}. Please specify a code path that does not include "
158
+ "such files and try again.",
159
+ ),
160
+ error_code=INVALID_PARAMETER_VALUE,
161
+ ) from e
162
+ else:
163
+ code_dir_subpath = None
164
+ return code_dir_subpath
165
+
166
+
167
+ def _infer_and_copy_code_paths(flavor, path, default_subpath="code"):
168
+ # Capture all imported modules with full module name during loading model.
169
+ modules = _capture_imported_modules(path, flavor, record_full_module=True)
170
+
171
+ all_modules = set(modules)
172
+
173
+ for module in modules:
174
+ parent_module = module
175
+ while "." in parent_module:
176
+ parent_module = get_parent_module(parent_module)
177
+ all_modules.add(parent_module)
178
+
179
+ # Generate code_paths set from the imported modules full name list.
180
+ # It only picks necessary files, because:
181
+ # 1. Reduce risk of logging files containing user credentials to MLflow
182
+ # artifact repository.
183
+ # 2. In databricks runtime, notebook files might exist under a code_paths directory,
184
+ # if logging the whole directory to MLflow artifact repository, these
185
+ # notebook files are not accessible and trigger exceptions. On the other
186
+ # hand, these notebook files are not used as code_paths modules because
187
+ # code in notebook files are loaded into python `__main__` module.
188
+ code_paths = set()
189
+ for full_module_name in all_modules:
190
+ relative_path_str = full_module_name.replace(".", os.sep)
191
+ relative_path = Path(relative_path_str)
192
+ if relative_path.is_dir():
193
+ init_file_path = relative_path / "__init__.py"
194
+ if init_file_path.exists():
195
+ code_paths.add(init_file_path)
196
+
197
+ py_module_path = Path(relative_path_str + ".py")
198
+ if py_module_path.is_file():
199
+ code_paths.add(py_module_path)
200
+
201
+ if code_paths:
202
+ for code_path in code_paths:
203
+ src_dir_path = code_path.parent
204
+ src_file_name = code_path.name
205
+ dest_dir_path = Path(path) / default_subpath / src_dir_path
206
+ dest_file_path = dest_dir_path / src_file_name
207
+ dest_dir_path.mkdir(parents=True, exist_ok=True)
208
+ shutil.copyfile(code_path, dest_file_path)
209
+ return default_subpath
210
+
211
+ return None
212
+
213
+
214
+ def _validate_infer_and_copy_code_paths(
215
+ code_paths, path, infer_code_paths, flavor, default_subpath="code"
216
+ ):
217
+ if infer_code_paths:
218
+ if code_paths:
219
+ raise MlflowException(
220
+ "If 'infer_code_path' is set to True, 'code_paths' param cannot be set."
221
+ )
222
+ return _infer_and_copy_code_paths(flavor, path, default_subpath)
223
+ else:
224
+ return _validate_and_copy_code_paths(code_paths, path, default_subpath)
225
+
226
+
227
+ def _validate_path_exists(path, name):
228
+ if path and not os.path.exists(path):
229
+ raise MlflowException(
230
+ message=(
231
+ f"Failed to copy the specified {name} path '{path}' into the model "
232
+ f"artifacts. The specified {name}path does not exist. Please specify a valid "
233
+ f"{name} path and try again."
234
+ ),
235
+ error_code=INVALID_PARAMETER_VALUE,
236
+ )
237
+
238
+
239
+ def _validate_and_copy_file_to_directory(file_path: str, dir_path: str, name: str):
240
+ """Copies the file at file_path to the directory at dir_path.
241
+
242
+ Args:
243
+ file_path: A file that should be logged as an artifact.
244
+ dir_path: The path of the directory to save the file to.
245
+ name: The name for the kind of file being copied.
246
+ """
247
+ _validate_path_exists(file_path, name)
248
+ try:
249
+ _copy_file_or_tree(src=file_path, dst=dir_path)
250
+ except OSError as e:
251
+ # A common error is code-paths includes Databricks Notebook. We include it in error
252
+ # message when running in Databricks, but not in other envs tp avoid confusion.
253
+ example = ", such as Databricks Notebooks" if is_in_databricks_runtime() else ""
254
+ raise MlflowException(
255
+ message=(
256
+ f"Failed to copy the specified code path '{file_path}' into the model "
257
+ "artifacts. It appears that your code path includes file(s) that cannot "
258
+ f"be copied{example}. Please specify a code path that does not include "
259
+ "such files and try again.",
260
+ ),
261
+ error_code=INVALID_PARAMETER_VALUE,
262
+ ) from e
263
+
264
+
265
+ def _add_code_to_system_path(code_path):
266
+ sys.path = [code_path] + sys.path
267
+
268
+
269
+ def _validate_and_prepare_target_save_path(path):
270
+ if os.path.exists(path) and any(os.scandir(path)):
271
+ raise MlflowException(
272
+ message=f"Path '{path}' already exists and is not empty",
273
+ error_code=RESOURCE_ALREADY_EXISTS,
274
+ )
275
+
276
+ os.makedirs(path, exist_ok=True)
277
+
278
+
279
+ def _add_code_from_conf_to_system_path(local_path, conf, code_key=FLAVOR_CONFIG_CODE):
280
+ """Checks if any code_paths were logged with the model in the flavor conf and prepends
281
+ the directory to the system path.
282
+
283
+ Args:
284
+ local_path: The local path containing model artifacts.
285
+ conf: The flavor-specific conf that should contain the FLAVOR_CONFIG_CODE
286
+ key, which specifies the directory containing custom code logged as artifacts.
287
+ code_key: The key used by the flavor to indicate custom code artifacts.
288
+ By default this is FLAVOR_CONFIG_CODE.
289
+ """
290
+ assert isinstance(conf, dict), "`conf` argument must be a dict."
291
+
292
+ if code_key in conf and conf[code_key]:
293
+ code_path = os.path.join(local_path, conf[code_key])
294
+ _add_code_to_system_path(code_path)
295
+
296
+
297
+ def _validate_onnx_session_options(onnx_session_options):
298
+ """Validates that the specified onnx_session_options dict is valid.
299
+
300
+ Args:
301
+ onnx_session_options: The onnx_session_options dict to validate.
302
+ """
303
+ import onnxruntime as ort
304
+
305
+ if onnx_session_options is not None:
306
+ if not isinstance(onnx_session_options, dict):
307
+ raise TypeError(
308
+ f"Argument onnx_session_options should be a dict, not {type(onnx_session_options)}"
309
+ )
310
+ for key, value in onnx_session_options.items():
311
+ if key != "extra_session_config" and not hasattr(ort.SessionOptions, key):
312
+ raise ValueError(
313
+ f"Key {key} in onnx_session_options is not a valid "
314
+ "ONNX Runtime session options key"
315
+ )
316
+ elif key == "extra_session_config" and not isinstance(value, dict):
317
+ raise TypeError(
318
+ f"Value for key {key} in onnx_session_options should be a dict, "
319
+ "not {type(value)}"
320
+ )
321
+ elif key == "execution_mode" and value.upper() not in [
322
+ "PARALLEL",
323
+ "SEQUENTIAL",
324
+ ]:
325
+ raise ValueError(
326
+ f"Value for key {key} in onnx_session_options should be "
327
+ f"'parallel' or 'sequential', not {value}"
328
+ )
329
+ elif key == "graph_optimization_level" and value not in [0, 1, 2, 99]:
330
+ raise ValueError(
331
+ f"Value for key {key} in onnx_session_options should be 0, 1, 2, or 99, "
332
+ f"not {value}"
333
+ )
334
+ elif key in ["intra_op_num_threads", "intra_op_num_threads"] and value < 0:
335
+ raise ValueError(
336
+ f"Value for key {key} in onnx_session_options should be >= 0, not {value}"
337
+ )
338
+
339
+
340
+ def _get_overridden_pyfunc_model_config(
341
+ pyfunc_config: dict[str, Any], load_config: dict[str, Any], logger
342
+ ) -> dict[str, Any]:
343
+ """
344
+ Updates the inference configuration according to the model's configuration and the overrides.
345
+ Only arguments already present in the inference configuration can be updated. The environment
346
+ variable ``MLFLOW_PYFUNC_INFERENCE_CONFIG`` can also be used to provide additional inference
347
+ configuration.
348
+ """
349
+
350
+ overrides = {}
351
+ if env_overrides := os.getenv("MLFLOW_PYFUNC_INFERENCE_CONFIG"):
352
+ logger.debug(
353
+ "Inference configuration is being loaded from ``MLFLOW_PYFUNC_INFERENCE_CONFIG``"
354
+ " environ."
355
+ )
356
+ overrides.update(dict(json.loads(env_overrides)))
357
+
358
+ if load_config:
359
+ overrides.update(load_config)
360
+
361
+ if not overrides:
362
+ return pyfunc_config
363
+
364
+ if not pyfunc_config:
365
+ logger.warning(
366
+ f"Argument(s) {', '.join(overrides.keys())} were ignored since the model's ``pyfunc``"
367
+ " flavor doesn't accept model configuration. Use ``model_config`` when logging"
368
+ " the model to allow it."
369
+ )
370
+
371
+ return None
372
+
373
+ valid_keys = set(pyfunc_config.keys()) & set(overrides.keys())
374
+ ignored_keys = set(overrides.keys()) - valid_keys
375
+ allowed_config = {key: overrides[key] for key in valid_keys}
376
+ if ignored_keys:
377
+ logger.warning(
378
+ f"Argument(s) {', '.join(ignored_keys)} were ignored since they are not valid keys in"
379
+ " the corresponding section of the ``pyfunc`` flavor. Use ``model_config`` when"
380
+ " logging the model to include the keys you plan to indicate. Current allowed"
381
+ f" configuration includes {', '.join(pyfunc_config.keys())}"
382
+ )
383
+ pyfunc_config.update(allowed_config)
384
+ return pyfunc_config
385
+
386
+
387
+ def _validate_and_get_model_config_from_file(model_config):
388
+ model_config = os.path.abspath(model_config)
389
+ if os.path.exists(model_config):
390
+ with open(model_config) as file:
391
+ try:
392
+ return yaml.safe_load(file)
393
+ except yaml.YAMLError as e:
394
+ raise MlflowException(
395
+ f"The provided `model_config` file '{model_config}' is not a valid YAML "
396
+ f"file: {e}",
397
+ error_code=INVALID_PARAMETER_VALUE,
398
+ )
399
+ else:
400
+ raise MlflowException(
401
+ "An invalid `model_config` file was passed. The provided `model_config` "
402
+ f"file '{model_config}'is not a valid file path.",
403
+ error_code=INVALID_PARAMETER_VALUE,
404
+ )
405
+
406
+
407
+ def _validate_pyfunc_model_config(model_config):
408
+ """
409
+ Validates the values passes in the model_config section. There are no typing
410
+ restrictions but we require them being JSON-serializable.
411
+ """
412
+
413
+ if not model_config:
414
+ return
415
+
416
+ if isinstance(model_config, Path):
417
+ _validate_and_get_model_config_from_file(os.fspath(model_config))
418
+ elif isinstance(model_config, str):
419
+ _validate_and_get_model_config_from_file(model_config)
420
+ elif isinstance(model_config, dict) and all(isinstance(key, str) for key in model_config):
421
+ try:
422
+ json.dumps(model_config)
423
+ except (TypeError, OverflowError):
424
+ raise MlflowException(
425
+ "Values in the provided ``model_config`` are of an unsupported type. Only "
426
+ "JSON-serializable data types can be provided as values.",
427
+ error_code=INVALID_PARAMETER_VALUE,
428
+ )
429
+ else:
430
+ raise MlflowException(
431
+ "An invalid ``model_config`` structure was passed. ``model_config`` must be a "
432
+ "valid file path or of type ``dict`` with string keys.",
433
+ error_code=INVALID_PARAMETER_VALUE,
434
+ )
435
+
436
+
437
+ RECORD_ENV_VAR_ALLOWLIST = {
438
+ # api key related
439
+ "API_KEY",
440
+ "API_TOKEN",
441
+ # databricks auth related
442
+ "DATABRICKS_HOST",
443
+ "DATABRICKS_USERNAME",
444
+ "DATABRICKS_PASSWORD",
445
+ "DATABRICKS_TOKEN",
446
+ "DATABRICKS_INSECURE",
447
+ "DATABRICKS_CLIENT_ID",
448
+ "DATABRICKS_CLIENT_SECRET",
449
+ "_DATABRICKS_WORKSPACE_HOST",
450
+ "_DATABRICKS_WORKSPACE_ID",
451
+ }
452
+
453
+
454
+ @contextlib.contextmanager
455
+ def env_var_tracker():
456
+ """
457
+ Context manager for temporarily tracking environment variables accessed.
458
+ It tracks environment variables accessed during the context manager's lifetime.
459
+ """
460
+ from mlflow.environment_variables import MLFLOW_RECORD_ENV_VARS_IN_MODEL_LOGGING
461
+
462
+ tracked_env_names = set()
463
+
464
+ if MLFLOW_RECORD_ENV_VARS_IN_MODEL_LOGGING.get():
465
+ original_getitem = os._Environ.__getitem__
466
+ original_get = os._Environ.get
467
+
468
+ def updated_get_item(self, key):
469
+ result = original_getitem(self, key)
470
+ tracked_env_names.add(key)
471
+ return result
472
+
473
+ def updated_get(self, key, *args, **kwargs):
474
+ if key in self:
475
+ tracked_env_names.add(key)
476
+ return original_get(self, key, *args, **kwargs)
477
+
478
+ try:
479
+ os._Environ.__getitem__ = updated_get_item
480
+ os._Environ.get = updated_get
481
+ yield tracked_env_names
482
+ finally:
483
+ os._Environ.__getitem__ = original_getitem
484
+ os._Environ.get = original_get
485
+ else:
486
+ yield tracked_env_names