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,42 @@
1
+ """Export and import of generic R models.
2
+
3
+ This module defines generic filesystem format for R models and provides utilities
4
+ for saving and loading to and from this format. The format is self contained in the sense
5
+ that it includes all necessary information for anyone to load it and use it. Dependencies
6
+ are either stored directly with the model or referenced via a Conda environment.
7
+
8
+ The convention for rfunc models is to have a ``predict`` method or function with the following
9
+ signature::
10
+
11
+ predict(data: DataFrame) -> DataFrame
12
+
13
+ This convention is relied on by other MLflow components.
14
+
15
+ Rfunc model format is defined as a directory structure containing all required data, code, and
16
+ configuration:
17
+
18
+ .. code::
19
+
20
+ ./dst-path/
21
+ ./MLmodel: configuration
22
+
23
+ It must contain MLmodel file in its root with "r_function" format.
24
+
25
+ Example:
26
+
27
+ .. code:: shell
28
+
29
+ >tree R/mlflow/R/inst/examples/R/lm/model
30
+ ├── MLmodel
31
+ └── r_model.bin
32
+
33
+ >cat R/mlflow/R/inst/examples/R/lm/model/MLmodel
34
+ time_created: 1.5337659e+09
35
+ flavors:
36
+ r_function:
37
+ version: 0.1.0
38
+ model: r_model.bin
39
+
40
+ """
41
+
42
+ FLAVOR_NAME = "crate"
@@ -0,0 +1,134 @@
1
+ import logging
2
+ import os
3
+ import re
4
+ import subprocess
5
+ import sys
6
+
7
+ from mlflow.exceptions import MlflowException
8
+ from mlflow.models import FlavorBackend
9
+ from mlflow.tracking.artifact_utils import _download_artifact_from_uri
10
+ from mlflow.utils.string_utils import quote
11
+
12
+ _logger = logging.getLogger(__name__)
13
+
14
+
15
+ class RFuncBackend(FlavorBackend):
16
+ """
17
+ Flavor backend implementation for the generic R models.
18
+ Predict and serve locally models with 'crate' flavor.
19
+ """
20
+
21
+ def build_image(
22
+ self, model_uri, image_name, install_mlflow, mlflow_home, enable_mlserver, base_image=None
23
+ ):
24
+ pass
25
+
26
+ def generate_dockerfile(
27
+ self, model_uri, output_path, install_mlflow, mlflow_home, enable_mlserver, base_image=None
28
+ ):
29
+ pass
30
+
31
+ version_pattern = re.compile(r"version ([0-9]+\.[0-9]+\.[0-9]+)")
32
+
33
+ def predict(
34
+ self,
35
+ model_uri,
36
+ input_path,
37
+ output_path,
38
+ content_type,
39
+ pip_requirements_override=None,
40
+ extra_envs=None,
41
+ ):
42
+ """
43
+ Generate predictions using R model saved with MLflow.
44
+ Return the prediction results as a JSON.
45
+ """
46
+ if pip_requirements_override is not None:
47
+ raise MlflowException("pip_requirements_override is not supported in the R backend.")
48
+ model_path = _download_artifact_from_uri(model_uri)
49
+ str_cmd = (
50
+ "mlflow:::mlflow_rfunc_predict(model_path = '{0}', input_path = {1}, "
51
+ "output_path = {2}, content_type = {3})"
52
+ )
53
+ command = str_cmd.format(
54
+ quote(model_path),
55
+ _str_optional(input_path),
56
+ _str_optional(output_path),
57
+ _str_optional(content_type),
58
+ )
59
+ _execute(command, extra_envs=extra_envs)
60
+
61
+ def serve(
62
+ self,
63
+ model_uri,
64
+ port,
65
+ host,
66
+ timeout,
67
+ enable_mlserver,
68
+ synchronous=True,
69
+ stdout=None,
70
+ stderr=None,
71
+ ):
72
+ """
73
+ Generate R model locally.
74
+
75
+ NOTE: The `enable_mlserver` parameter is there to comply with the
76
+ FlavorBackend interface but is not supported by MLServer yet.
77
+ https://github.com/SeldonIO/MLServer/issues/183
78
+ """
79
+ if enable_mlserver:
80
+ raise Exception("The MLServer inference server is not yet supported in the R backend.")
81
+
82
+ if timeout:
83
+ _logger.warning("Timeout is not yet supported in the R backend.")
84
+
85
+ if not synchronous:
86
+ raise Exception("RBackend does not support call with synchronous=False")
87
+
88
+ if stdout is not None or stderr is not None:
89
+ raise Exception("RBackend does not support redirect stdout/stderr.")
90
+
91
+ model_path = _download_artifact_from_uri(model_uri)
92
+ command = "mlflow::mlflow_rfunc_serve('{}', port = {}, host = '{}')".format(
93
+ quote(model_path), port, host
94
+ )
95
+ _execute(command)
96
+
97
+ def can_score_model(self):
98
+ # `Rscript --version` writes to stderr in R < 4.2.0 but stdout in R >= 4.2.0.
99
+ process = subprocess.Popen(
100
+ ["Rscript", "--version"],
101
+ close_fds=True,
102
+ stdout=subprocess.PIPE,
103
+ stderr=subprocess.STDOUT,
104
+ )
105
+ stdout, _ = process.communicate()
106
+ if process.wait() != 0:
107
+ return False
108
+
109
+ version = self.version_pattern.search(stdout.decode("utf-8"))
110
+ if not version:
111
+ return False
112
+ version = [int(x) for x in version.group(1).split(".")]
113
+ return version[0] > 3 or version[0] == 3 and version[1] >= 3
114
+
115
+
116
+ def _execute(command, extra_envs=None):
117
+ env = os.environ.copy()
118
+ if extra_envs:
119
+ env.update(extra_envs)
120
+
121
+ process = subprocess.Popen(
122
+ ["Rscript", "-e", command],
123
+ env=env,
124
+ close_fds=False,
125
+ stdin=sys.stdin,
126
+ stdout=sys.stdout,
127
+ stderr=sys.stderr,
128
+ )
129
+ if process.wait() != 0:
130
+ raise Exception("Command returned non zero exit code.")
131
+
132
+
133
+ def _str_optional(s):
134
+ return "NULL" if s is None else f"'{quote(str(s))}'"
mlflow/runs.py ADDED
@@ -0,0 +1,89 @@
1
+ """
2
+ CLI for runs
3
+ """
4
+
5
+ import json
6
+
7
+ import click
8
+
9
+ from mlflow.entities import ViewType
10
+ from mlflow.environment_variables import MLFLOW_EXPERIMENT_ID
11
+ from mlflow.tracking import _get_store
12
+ from mlflow.utils.string_utils import _create_table
13
+ from mlflow.utils.time import conv_longdate_to_str
14
+
15
+ RUN_ID = click.option("--run-id", type=click.STRING, required=True)
16
+
17
+
18
+ @click.group("runs")
19
+ def commands():
20
+ """
21
+ Manage runs. To manage runs of experiments associated with a tracking server, set the
22
+ MLFLOW_TRACKING_URI environment variable to the URL of the desired server.
23
+ """
24
+
25
+
26
+ @commands.command("list")
27
+ @click.option(
28
+ "--experiment-id",
29
+ envvar=MLFLOW_EXPERIMENT_ID.name,
30
+ type=click.STRING,
31
+ help="Specify the experiment ID for list of runs.",
32
+ required=True,
33
+ )
34
+ @click.option(
35
+ "--view",
36
+ "-v",
37
+ default="active_only",
38
+ help="Select view type for list experiments. Valid view types are "
39
+ "'active_only' (default), 'deleted_only', and 'all'.",
40
+ )
41
+ def list_run(experiment_id, view):
42
+ """
43
+ List all runs of the specified experiment in the configured tracking server.
44
+ """
45
+ store = _get_store()
46
+ view_type = ViewType.from_string(view) if view else ViewType.ACTIVE_ONLY
47
+ runs = store.search_runs([experiment_id], None, view_type)
48
+ table = []
49
+ for run in runs:
50
+ run_name = run.info.run_name or ""
51
+ table.append([conv_longdate_to_str(run.info.start_time), run_name, run.info.run_id])
52
+ click.echo(_create_table(sorted(table, reverse=True), headers=["Date", "Name", "ID"]))
53
+
54
+
55
+ @commands.command("delete")
56
+ @RUN_ID
57
+ def delete_run(run_id):
58
+ """
59
+ Mark a run for deletion. Return an error if the run does not exist or
60
+ is already marked. You can restore a marked run with ``restore_run``,
61
+ or permanently delete a run in the backend store.
62
+ """
63
+ store = _get_store()
64
+ store.delete_run(run_id)
65
+ click.echo(f"Run with ID {run_id} has been deleted.")
66
+
67
+
68
+ @commands.command("restore")
69
+ @RUN_ID
70
+ def restore_run(run_id):
71
+ """
72
+ Restore a deleted run.
73
+ Returns an error if the run is active or has been permanently deleted.
74
+ """
75
+ store = _get_store()
76
+ store.restore_run(run_id)
77
+ click.echo(f"Run with id {run_id} has been restored.")
78
+
79
+
80
+ @commands.command("describe")
81
+ @RUN_ID
82
+ def describe_run(run_id):
83
+ """
84
+ All of run details will print to the stdout as JSON format.
85
+ """
86
+ store = _get_store()
87
+ run = store.get_run(run_id)
88
+ json_run = json.dumps(run.to_dictionary(), indent=4)
89
+ click.echo(json_run)
@@ -0,0 +1,302 @@
1
+ import importlib
2
+ import importlib.metadata
3
+ import os
4
+ import shlex
5
+ import sys
6
+ import textwrap
7
+ import types
8
+
9
+ from flask import Flask, Response, send_from_directory
10
+ from packaging.version import Version
11
+
12
+ from mlflow.environment_variables import MLFLOW_FLASK_SERVER_SECRET_KEY
13
+ from mlflow.exceptions import MlflowException
14
+ from mlflow.server import handlers
15
+ from mlflow.server.handlers import (
16
+ STATIC_PREFIX_ENV_VAR,
17
+ _add_static_prefix,
18
+ create_promptlab_run_handler,
19
+ gateway_proxy_handler,
20
+ get_artifact_handler,
21
+ get_logged_model_artifact_handler,
22
+ get_metric_history_bulk_handler,
23
+ get_metric_history_bulk_interval_handler,
24
+ get_model_version_artifact_handler,
25
+ get_trace_artifact_handler,
26
+ search_datasets_handler,
27
+ upload_artifact_handler,
28
+ )
29
+ from mlflow.utils.os import is_windows
30
+ from mlflow.utils.plugins import get_entry_points
31
+ from mlflow.utils.process import _exec_cmd
32
+ from mlflow.version import VERSION
33
+
34
+ # NB: These are internal environment variables used for communication between
35
+ # the cli and the forked gunicorn processes.
36
+ BACKEND_STORE_URI_ENV_VAR = "_MLFLOW_SERVER_FILE_STORE"
37
+ REGISTRY_STORE_URI_ENV_VAR = "_MLFLOW_SERVER_REGISTRY_STORE"
38
+ ARTIFACT_ROOT_ENV_VAR = "_MLFLOW_SERVER_ARTIFACT_ROOT"
39
+ ARTIFACTS_DESTINATION_ENV_VAR = "_MLFLOW_SERVER_ARTIFACT_DESTINATION"
40
+ PROMETHEUS_EXPORTER_ENV_VAR = "prometheus_multiproc_dir"
41
+ SERVE_ARTIFACTS_ENV_VAR = "_MLFLOW_SERVER_SERVE_ARTIFACTS"
42
+ ARTIFACTS_ONLY_ENV_VAR = "_MLFLOW_SERVER_ARTIFACTS_ONLY"
43
+
44
+ # Genesis-Flow: UI removed, no static directory needed
45
+ REL_STATIC_DIR = None
46
+
47
+ app = Flask(__name__)
48
+ IS_FLASK_V1 = Version(importlib.metadata.version("flask")) < Version("2.0")
49
+
50
+
51
+ for http_path, handler, methods in handlers.get_endpoints():
52
+ app.add_url_rule(http_path, handler.__name__, handler, methods=methods)
53
+
54
+ if os.getenv(PROMETHEUS_EXPORTER_ENV_VAR):
55
+ from mlflow.server.prometheus_exporter import activate_prometheus_exporter
56
+
57
+ prometheus_metrics_path = os.getenv(PROMETHEUS_EXPORTER_ENV_VAR)
58
+ if not os.path.exists(prometheus_metrics_path):
59
+ os.makedirs(prometheus_metrics_path)
60
+ activate_prometheus_exporter(app)
61
+
62
+
63
+ # Provide a health check endpoint to ensure the application is responsive
64
+ @app.route("/health")
65
+ def health():
66
+ return "OK", 200
67
+
68
+
69
+ # Provide an endpoint to query the version of mlflow running on the server
70
+ @app.route("/version")
71
+ def version():
72
+ return VERSION, 200
73
+
74
+
75
+ # Serve the "get-artifact" route.
76
+ @app.route(_add_static_prefix("/get-artifact"))
77
+ def serve_artifacts():
78
+ return get_artifact_handler()
79
+
80
+
81
+ # Serve the "model-versions/get-artifact" route.
82
+ @app.route(_add_static_prefix("/model-versions/get-artifact"))
83
+ def serve_model_version_artifact():
84
+ return get_model_version_artifact_handler()
85
+
86
+
87
+ # Serve the "metrics/get-history-bulk" route.
88
+ @app.route(_add_static_prefix("/ajax-api/2.0/mlflow/metrics/get-history-bulk"))
89
+ def serve_get_metric_history_bulk():
90
+ return get_metric_history_bulk_handler()
91
+
92
+
93
+ # Serve the "metrics/get-history-bulk-interval" route.
94
+ @app.route(_add_static_prefix("/ajax-api/2.0/mlflow/metrics/get-history-bulk-interval"))
95
+ def serve_get_metric_history_bulk_interval():
96
+ return get_metric_history_bulk_interval_handler()
97
+
98
+
99
+ # Serve the "experiments/search-datasets" route.
100
+ @app.route(_add_static_prefix("/ajax-api/2.0/mlflow/experiments/search-datasets"), methods=["POST"])
101
+ def serve_search_datasets():
102
+ return search_datasets_handler()
103
+
104
+
105
+ # Serve the "runs/create-promptlab-run" route.
106
+ @app.route(_add_static_prefix("/ajax-api/2.0/mlflow/runs/create-promptlab-run"), methods=["POST"])
107
+ def serve_create_promptlab_run():
108
+ return create_promptlab_run_handler()
109
+
110
+
111
+ @app.route(_add_static_prefix("/ajax-api/2.0/mlflow/gateway-proxy"), methods=["POST", "GET"])
112
+ def serve_gateway_proxy():
113
+ return gateway_proxy_handler()
114
+
115
+
116
+ @app.route(_add_static_prefix("/ajax-api/2.0/mlflow/upload-artifact"), methods=["POST"])
117
+ def serve_upload_artifact():
118
+ return upload_artifact_handler()
119
+
120
+
121
+ # Serve the "/get-trace-artifact" route to allow frontend to fetch trace artifacts
122
+ # and render them in the Trace UI. The request body should contain the request_id
123
+ # of the trace.
124
+ @app.route(_add_static_prefix("/ajax-api/2.0/mlflow/get-trace-artifact"), methods=["GET"])
125
+ def serve_get_trace_artifact():
126
+ return get_trace_artifact_handler()
127
+
128
+
129
+ @app.route(
130
+ _add_static_prefix("/ajax-api/2.0/mlflow/logged-models/<model_id>/artifacts/files"),
131
+ methods=["GET"],
132
+ )
133
+ def serve_get_logged_model_artifact(model_id: str):
134
+ return get_logged_model_artifact_handler(model_id)
135
+
136
+
137
+ # Genesis-Flow: No static files to serve (UI removed)
138
+ @app.route(_add_static_prefix("/static-files/<path:path>"))
139
+ def serve_static_file(path):
140
+ return Response("Genesis-Flow: Static files not available (UI removed)", status=404, mimetype="text/plain")
141
+
142
+
143
+ # Genesis-Flow: API-only server, no UI
144
+ @app.route(_add_static_prefix("/"))
145
+ def serve():
146
+ text = textwrap.dedent(
147
+ """
148
+ Genesis-Flow API Server
149
+
150
+ This is an API-only MLflow-compatible server without UI components.
151
+ Access the REST API endpoints at /api/2.0/mlflow/
152
+
153
+ Health check: /health
154
+ Version: /version
155
+ """
156
+ )
157
+ return Response(text, mimetype="text/plain")
158
+
159
+
160
+ def _find_app(app_name: str) -> str:
161
+ apps = get_entry_points("mlflow.app")
162
+ for app in apps:
163
+ if app.name == app_name:
164
+ return app.value
165
+
166
+ raise MlflowException(
167
+ f"Failed to find app '{app_name}'. Available apps: {[a.name for a in apps]}"
168
+ )
169
+
170
+
171
+ def _is_factory(app: str) -> bool:
172
+ """
173
+ Returns True if the given app is a factory function, False otherwise.
174
+
175
+ Args:
176
+ app: The app to check, e.g. "mlflow.server.app:app
177
+ """
178
+ module, obj_name = app.rsplit(":", 1)
179
+ mod = importlib.import_module(module)
180
+ obj = getattr(mod, obj_name)
181
+ return isinstance(obj, types.FunctionType)
182
+
183
+
184
+ def get_app_client(app_name: str, *args, **kwargs):
185
+ """
186
+ Instantiate a client provided by an app.
187
+
188
+ Args:
189
+ app_name: The app name defined in `setup.py`, e.g., "basic-auth".
190
+ args: Additional arguments passed to the app client constructor.
191
+ kwargs: Additional keyword arguments passed to the app client constructor.
192
+
193
+ Returns:
194
+ An app client instance.
195
+ """
196
+ clients = get_entry_points("mlflow.app.client")
197
+ for client in clients:
198
+ if client.name == app_name:
199
+ cls = client.load()
200
+ return cls(*args, **kwargs)
201
+
202
+ raise MlflowException(
203
+ f"Failed to find client for '{app_name}'. Available clients: {[c.name for c in clients]}"
204
+ )
205
+
206
+
207
+ def _build_waitress_command(waitress_opts, host, port, app_name, is_factory):
208
+ opts = shlex.split(waitress_opts) if waitress_opts else []
209
+ return [
210
+ sys.executable,
211
+ "-m",
212
+ "waitress",
213
+ *opts,
214
+ f"--host={host}",
215
+ f"--port={port}",
216
+ "--ident=mlflow",
217
+ *(["--call"] if is_factory else []),
218
+ app_name,
219
+ ]
220
+
221
+
222
+ def _build_gunicorn_command(gunicorn_opts, host, port, workers, app_name):
223
+ bind_address = f"{host}:{port}"
224
+ opts = shlex.split(gunicorn_opts) if gunicorn_opts else []
225
+ return [
226
+ sys.executable,
227
+ "-m",
228
+ "gunicorn",
229
+ *opts,
230
+ "-b",
231
+ bind_address,
232
+ "-w",
233
+ str(workers),
234
+ app_name,
235
+ ]
236
+
237
+
238
+ def _run_server( # noqa: D417
239
+ file_store_path,
240
+ registry_store_uri,
241
+ default_artifact_root,
242
+ serve_artifacts,
243
+ artifacts_only,
244
+ artifacts_destination,
245
+ host,
246
+ port,
247
+ static_prefix=None,
248
+ workers=None,
249
+ gunicorn_opts=None,
250
+ waitress_opts=None,
251
+ expose_prometheus=None,
252
+ app_name=None,
253
+ ):
254
+ """
255
+ Run the MLflow server, wrapping it in gunicorn or waitress on windows
256
+
257
+ Args:
258
+ static_prefix: If set, the index.html asset will be served from the path static_prefix.
259
+ If left None, the index.html asset will be served from the root path.
260
+
261
+ Returns:
262
+ None
263
+ """
264
+ env_map = {}
265
+ if file_store_path:
266
+ env_map[BACKEND_STORE_URI_ENV_VAR] = file_store_path
267
+ if registry_store_uri:
268
+ env_map[REGISTRY_STORE_URI_ENV_VAR] = registry_store_uri
269
+ if default_artifact_root:
270
+ env_map[ARTIFACT_ROOT_ENV_VAR] = default_artifact_root
271
+ if serve_artifacts:
272
+ env_map[SERVE_ARTIFACTS_ENV_VAR] = "true"
273
+ if artifacts_only:
274
+ env_map[ARTIFACTS_ONLY_ENV_VAR] = "true"
275
+ if artifacts_destination:
276
+ env_map[ARTIFACTS_DESTINATION_ENV_VAR] = artifacts_destination
277
+ if static_prefix:
278
+ env_map[STATIC_PREFIX_ENV_VAR] = static_prefix
279
+
280
+ if expose_prometheus:
281
+ env_map[PROMETHEUS_EXPORTER_ENV_VAR] = expose_prometheus
282
+
283
+ secret_key = MLFLOW_FLASK_SERVER_SECRET_KEY.get()
284
+ if secret_key:
285
+ env_map[MLFLOW_FLASK_SERVER_SECRET_KEY.name] = secret_key
286
+
287
+ if app_name is None:
288
+ app = f"{__name__}:app"
289
+ is_factory = False
290
+ else:
291
+ app = _find_app(app_name)
292
+ is_factory = _is_factory(app)
293
+ # `waitress` doesn't support `()` syntax for factory functions.
294
+ # Instead, we need to use the `--call` flag.
295
+ app = f"{app}()" if (not is_windows() and is_factory) else app
296
+
297
+ # TODO: eventually may want waitress on non-win32
298
+ if sys.platform == "win32":
299
+ full_command = _build_waitress_command(waitress_opts, host, port, app, is_factory)
300
+ else:
301
+ full_command = _build_gunicorn_command(gunicorn_opts, host, port, workers or 4, app)
302
+ _exec_cmd(full_command, extra_env=env_map, capture_output=False)