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,816 @@
1
+ import json
2
+ from abc import ABCMeta, abstractmethod
3
+ from typing import Any, Optional
4
+
5
+ from mlflow.entities import (
6
+ DatasetInput,
7
+ LoggedModel,
8
+ LoggedModelInput,
9
+ LoggedModelOutput,
10
+ LoggedModelParameter,
11
+ LoggedModelStatus,
12
+ LoggedModelTag,
13
+ ViewType,
14
+ )
15
+ from mlflow.entities.metric import MetricWithRunId
16
+ from mlflow.entities.trace_info import TraceInfo
17
+ from mlflow.exceptions import MlflowException
18
+ from mlflow.store.entities.paged_list import PagedList
19
+ from mlflow.store.tracking import SEARCH_MAX_RESULTS_DEFAULT, SEARCH_TRACES_DEFAULT_MAX_RESULTS
20
+ from mlflow.utils import mlflow_tags
21
+ from mlflow.utils.annotations import developer_stable
22
+ from mlflow.utils.async_logging.async_logging_queue import AsyncLoggingQueue
23
+ from mlflow.utils.async_logging.run_operations import RunOperations
24
+
25
+
26
+ @developer_stable
27
+ class AbstractStore:
28
+ """
29
+ Abstract class for Backend Storage.
30
+ This class defines the API interface for front ends to connect with various types of backends.
31
+ """
32
+
33
+ __metaclass__ = ABCMeta
34
+
35
+ def __init__(self):
36
+ """
37
+ Empty constructor for now. This is deliberately not marked as abstract, else every
38
+ derived class would be forced to create one.
39
+ """
40
+ self._async_logging_queue = AsyncLoggingQueue(logging_func=self.log_batch)
41
+
42
+ @abstractmethod
43
+ def search_experiments(
44
+ self,
45
+ view_type=ViewType.ACTIVE_ONLY,
46
+ max_results=SEARCH_MAX_RESULTS_DEFAULT,
47
+ filter_string=None,
48
+ order_by=None,
49
+ page_token=None,
50
+ ):
51
+ """
52
+ Search for experiments that match the specified search query.
53
+
54
+ Args:
55
+ view_type: One of enum values ``ACTIVE_ONLY``, ``DELETED_ONLY``, or ``ALL``
56
+ defined in :py:class:`mlflow.entities.ViewType`.
57
+ max_results: Maximum number of experiments desired. Certain server backend may apply
58
+ its own limit.
59
+ filter_string: Filter query string (e.g., ``"name = 'my_experiment'"``), defaults to
60
+ searching for all experiments. The following identifiers, comparators, and logical
61
+ operators are supported.
62
+
63
+ Identifiers
64
+ - ``name``: Experiment name
65
+ - ``creation_time``: Experiment creation time
66
+ - ``last_update_time``: Experiment last update time
67
+ - ``tags.<tag_key>``: Experiment tag. If ``tag_key`` contains
68
+ spaces, it must be wrapped with backticks (e.g., ``"tags.`extra key`"``).
69
+
70
+ Comparators for string attributes and tags
71
+ - ``=``: Equal to
72
+ - ``!=``: Not equal to
73
+ - ``LIKE``: Case-sensitive pattern match
74
+ - ``ILIKE``: Case-insensitive pattern match
75
+
76
+ Comparators for numeric attributes
77
+ - ``=``: Equal to
78
+ - ``!=``: Not equal to
79
+ - ``<``: Less than
80
+ - ``<=``: Less than or equal to
81
+ - ``>``: Greater than
82
+ - ``>=``: Greater than or equal to
83
+
84
+ Logical operators
85
+ - ``AND``: Combines two sub-queries and returns True if both of them are True.
86
+
87
+ order_by: List of columns to order by. The ``order_by`` column can contain an optional
88
+ ``DESC`` or ``ASC`` value (e.g., ``"name DESC"``). The default ordering is ``ASC``,
89
+ so ``"name"`` is equivalent to ``"name ASC"``. If unspecified, defaults to
90
+ ``["last_update_time DESC"]``, which lists experiments updated most recently first.
91
+ The following fields are supported:
92
+
93
+ - ``experiment_id``: Experiment ID
94
+ - ``name``: Experiment name
95
+ - ``creation_time``: Experiment creation time
96
+ - ``last_update_time``: Experiment last update time
97
+
98
+ page_token: Token specifying the next page of results. It should be obtained from
99
+ a ``search_experiments`` call.
100
+
101
+ Returns:
102
+ A :py:class:`PagedList <mlflow.store.entities.PagedList>` of
103
+ :py:class:`Experiment <mlflow.entities.Experiment>` objects. The pagination token
104
+ for the next page can be obtained via the ``token`` attribute of the object.
105
+
106
+ """
107
+
108
+ @abstractmethod
109
+ def create_experiment(self, name, artifact_location, tags):
110
+ """
111
+ Create a new experiment.
112
+ If an experiment with the given name already exists, throws exception.
113
+
114
+ Args:
115
+ name: Desired name for an experiment.
116
+ artifact_location: Base location for artifacts in runs. May be None.
117
+ tags: Experiment tags to set upon experiment creation
118
+
119
+ Returns:
120
+ experiment_id (string) for the newly created experiment if successful, else None.
121
+
122
+ """
123
+
124
+ @abstractmethod
125
+ def get_experiment(self, experiment_id):
126
+ """
127
+ Fetch the experiment by ID from the backend store.
128
+
129
+ Args:
130
+ experiment_id: String id for the experiment
131
+
132
+ Returns:
133
+ A single :py:class:`mlflow.entities.Experiment` object if it exists,
134
+ otherwise raises an exception.
135
+ """
136
+
137
+ def get_experiment_by_name(self, experiment_name):
138
+ """
139
+ Fetch the experiment by name from the backend store.
140
+
141
+ Args:
142
+ experiment_name: Name of experiment
143
+
144
+ Returns:
145
+ A single :py:class:`mlflow.entities.Experiment` object if it exists.
146
+ """
147
+
148
+ @abstractmethod
149
+ def delete_experiment(self, experiment_id):
150
+ """
151
+ Delete the experiment from the backend store. Deleted experiments can be restored until
152
+ permanently deleted.
153
+
154
+ Args:
155
+ experiment_id: String id for the experiment.
156
+ """
157
+
158
+ @abstractmethod
159
+ def restore_experiment(self, experiment_id):
160
+ """
161
+ Restore deleted experiment unless it is permanently deleted.
162
+
163
+ Args:
164
+ experiment_id: String id for the experiment.
165
+ """
166
+
167
+ @abstractmethod
168
+ def rename_experiment(self, experiment_id, new_name):
169
+ """
170
+ Update an experiment's name. The new name must be unique.
171
+
172
+ Args:
173
+ experiment_id: String id for the experiment.
174
+ new_name: New name for the experiment.
175
+ """
176
+
177
+ @abstractmethod
178
+ def get_run(self, run_id):
179
+ """
180
+ Fetch the run from backend store. The resulting :py:class:`Run <mlflow.entities.Run>`
181
+ contains a collection of run metadata - :py:class:`RunInfo <mlflow.entities.RunInfo>`,
182
+ as well as a collection of run parameters, tags, and metrics -
183
+ :py:class:`RunData <mlflow.entities.RunData>`. In the case where multiple metrics with the
184
+ same key are logged for the run, the :py:class:`RunData <mlflow.entities.RunData>` contains
185
+ the value at the latest timestamp for each metric. If there are multiple values with the
186
+ latest timestamp for a given metric, the maximum of these values is returned.
187
+
188
+ Args:
189
+ run_id: Unique identifier for the run.
190
+
191
+ Returns:
192
+ A single :py:class:`mlflow.entities.Run` object, if the run exists. Otherwise,
193
+ raises an exception.
194
+ """
195
+
196
+ @abstractmethod
197
+ def update_run_info(self, run_id, run_status, end_time, run_name):
198
+ """
199
+ Update the metadata of the specified run.
200
+
201
+ Returns:
202
+ mlflow.entities.RunInfo: Describing the updated run.
203
+ """
204
+
205
+ @abstractmethod
206
+ def create_run(self, experiment_id, user_id, start_time, tags, run_name):
207
+ """
208
+ Create a run under the specified experiment ID, setting the run's status to "RUNNING"
209
+ and the start time to the current time.
210
+
211
+ Args:
212
+ experiment_id: String id of the experiment for this run.
213
+ user_id: ID of the user launching this run.
214
+ start_time: Start time of the run.
215
+ tags: A dictionary of string keys and string values.
216
+ run_name: Name of the run.
217
+
218
+ Returns:
219
+ The created Run object
220
+ """
221
+
222
+ @abstractmethod
223
+ def delete_run(self, run_id):
224
+ """
225
+ Delete a run.
226
+
227
+ Args:
228
+ run_id: The ID of the run to delete.
229
+
230
+ """
231
+
232
+ @abstractmethod
233
+ def restore_run(self, run_id):
234
+ """
235
+ Restore a run.
236
+
237
+ Args:
238
+ run_id: The ID of the run to restore.
239
+
240
+ """
241
+
242
+ def start_trace(self, trace_info: TraceInfo) -> TraceInfo:
243
+ """
244
+ Create a trace using the V3 API format with a complete Trace object.
245
+
246
+ Args:
247
+ trace_info: The TraceInfo object to create in the backend.
248
+
249
+ Returns:
250
+ The returned TraceInfo object from the backend.
251
+ """
252
+ raise NotImplementedError
253
+
254
+ def delete_traces(
255
+ self,
256
+ experiment_id: str,
257
+ max_timestamp_millis: Optional[int] = None,
258
+ max_traces: Optional[int] = None,
259
+ trace_ids: Optional[list[str]] = None,
260
+ ) -> int:
261
+ """
262
+ Delete traces based on the specified criteria.
263
+
264
+ - Either `max_timestamp_millis` or `trace_ids` must be specified, but not both.
265
+ - `max_traces` can't be specified if `trace_ids` is specified.
266
+
267
+ Args:
268
+ experiment_id: ID of the associated experiment.
269
+ max_timestamp_millis: The maximum timestamp in milliseconds since the UNIX epoch for
270
+ deleting traces. Traces older than or equal to this timestamp will be deleted.
271
+ max_traces: The maximum number of traces to delete. If max_traces is specified, and
272
+ it is less than the number of traces that would be deleted based on the
273
+ max_timestamp_millis, the oldest traces will be deleted first.
274
+ trace_ids: A set of trace IDs to delete.
275
+
276
+ Returns:
277
+ The number of traces deleted.
278
+ """
279
+ # trace_ids can't be an empty list of string
280
+ if max_timestamp_millis is None and not trace_ids:
281
+ raise MlflowException.invalid_parameter_value(
282
+ "Either `max_timestamp_millis` or `trace_ids` must be specified.",
283
+ )
284
+ if max_timestamp_millis and trace_ids:
285
+ raise MlflowException.invalid_parameter_value(
286
+ "Only one of `max_timestamp_millis` and `trace_ids` can be specified.",
287
+ )
288
+ if trace_ids and max_traces is not None:
289
+ raise MlflowException.invalid_parameter_value(
290
+ "`max_traces` can't be specified if `trace_ids` is specified.",
291
+ )
292
+ if max_traces is not None and max_traces <= 0:
293
+ raise MlflowException.invalid_parameter_value(
294
+ f"`max_traces` must be a positive integer, received {max_traces}.",
295
+ )
296
+ return self._delete_traces(experiment_id, max_timestamp_millis, max_traces, trace_ids)
297
+
298
+ def _delete_traces(
299
+ self,
300
+ experiment_id: str,
301
+ max_timestamp_millis: Optional[int] = None,
302
+ max_traces: Optional[int] = None,
303
+ trace_ids: Optional[list[str]] = None,
304
+ ) -> int:
305
+ raise NotImplementedError
306
+
307
+ def get_trace_info(self, trace_id: str) -> TraceInfo:
308
+ """
309
+ Get the trace matching the `trace_id`.
310
+
311
+ Args:
312
+ trace_id: String id of the trace to fetch.
313
+
314
+ Returns:
315
+ The fetched Trace object, of type ``mlflow.entities.TraceInfo``.
316
+ """
317
+ raise NotImplementedError
318
+
319
+ def get_online_trace_details(
320
+ self,
321
+ trace_id: str,
322
+ sql_warehouse_id: str,
323
+ source_inference_table: str,
324
+ source_databricks_request_id: str,
325
+ ) -> str:
326
+ raise NotImplementedError(
327
+ f"{self.__class__.__name__} does not support `get_online_trace_details`."
328
+ )
329
+
330
+ def search_traces(
331
+ self,
332
+ experiment_ids: list[str],
333
+ filter_string: Optional[str] = None,
334
+ max_results: int = SEARCH_TRACES_DEFAULT_MAX_RESULTS,
335
+ order_by: Optional[list[str]] = None,
336
+ page_token: Optional[str] = None,
337
+ model_id: Optional[str] = None,
338
+ sql_warehouse_id: Optional[str] = None,
339
+ ) -> tuple[list[TraceInfo], Optional[str]]:
340
+ """
341
+ Return traces that match the given list of search expressions within the experiments.
342
+
343
+ Args:
344
+ experiment_ids: List of experiment ids to scope the search.
345
+ filter_string: A search filter string.
346
+ max_results: Maximum number of traces desired.
347
+ order_by: List of order_by clauses.
348
+ page_token: Token specifying the next page of results. It should be obtained from
349
+ a ``search_traces`` call.
350
+ model_id: If specified, return traces associated with the model ID.
351
+ sql_warehouse_id: Only used in Databricks. The ID of the SQL warehouse to use for
352
+ searching traces in inference tables.
353
+
354
+ Returns:
355
+ A tuple of a list of :py:class:`TraceInfo <mlflow.entities.TraceInfo>` objects that
356
+ satisfy the search expressions and a pagination token for the next page of results.
357
+ If the underlying tracking store supports pagination, the token for the
358
+ next page may be obtained via the ``token`` attribute of the returned object; however,
359
+ some store implementations may not support pagination and thus the returned token would
360
+ not be meaningful in such cases.
361
+ """
362
+ raise NotImplementedError
363
+
364
+ def set_trace_tag(self, trace_id: str, key: str, value: str):
365
+ """
366
+ Set a tag on the trace with the given trace_id.
367
+
368
+ Args:
369
+ trace_id: The ID of the trace.
370
+ key: The string key of the tag.
371
+ value: The string value of the tag.
372
+ """
373
+ raise NotImplementedError
374
+
375
+ def delete_trace_tag(self, trace_id: str, key: str):
376
+ """
377
+ Delete a tag on the trace with the given trace_id.
378
+
379
+ Args:
380
+ trace_id: The ID of the trace.
381
+ key: The string key of the tag.
382
+ """
383
+ raise NotImplementedError
384
+
385
+ def log_metric(self, run_id, metric):
386
+ """
387
+ Log a metric for the specified run
388
+
389
+ Args:
390
+ run_id: String id for the run
391
+ metric: `mlflow.entities.Metric` instance to log
392
+ """
393
+ self.log_batch(run_id, metrics=[metric], params=[], tags=[])
394
+
395
+ def log_metric_async(self, run_id, metric) -> RunOperations:
396
+ """
397
+ Log a metric for the specified run in async fashion.
398
+
399
+ Args:
400
+ run_id: String id for the run
401
+ metric: `mlflow.entities.Metric` instance to log
402
+ """
403
+ return self.log_batch_async(run_id, metrics=[metric], params=[], tags=[])
404
+
405
+ def log_param(self, run_id, param):
406
+ """
407
+ Log a param for the specified run
408
+
409
+ Args:
410
+ run_id: String id for the run
411
+ param: :py:class:`mlflow.entities.Param` instance to log
412
+ """
413
+ self.log_batch(run_id, metrics=[], params=[param], tags=[])
414
+
415
+ def log_param_async(self, run_id, param) -> RunOperations:
416
+ """
417
+ Log a param for the specified run in async fashion.
418
+
419
+ Args:
420
+ run_id: String id for the run.
421
+ param: :py:class:`mlflow.entities.Param` instance to log.
422
+ """
423
+ return self.log_batch_async(run_id, metrics=[], params=[param], tags=[])
424
+
425
+ def set_experiment_tag(self, experiment_id, tag):
426
+ """
427
+ Set a tag for the specified experiment
428
+
429
+ Args:
430
+ experiment_id: String id for the experiment.
431
+ tag: :py:class:`mlflow.entities.ExperimentTag` instance to set.
432
+ """
433
+
434
+ def set_tag(self, run_id, tag):
435
+ """
436
+ Set a tag for the specified run
437
+
438
+ Args:
439
+ run_id: String id for the run.
440
+ tag: :py:class:`mlflow.entities.RunTag` instance to set.
441
+ """
442
+ self.log_batch(run_id, metrics=[], params=[], tags=[tag])
443
+
444
+ def set_tag_async(self, run_id, tag) -> RunOperations:
445
+ """
446
+ Set a tag for the specified run in async fashion.
447
+
448
+ Args:
449
+ run_id: String id for the run.
450
+ tag: :py:class:`mlflow.entities.RunTag` instance to set.
451
+ """
452
+ return self.log_batch_async(run_id, metrics=[], params=[], tags=[tag])
453
+
454
+ @abstractmethod
455
+ def get_metric_history(self, run_id, metric_key, max_results=None, page_token=None):
456
+ """
457
+ Return a list of metric objects corresponding to all values logged for a given metric
458
+ within a run.
459
+
460
+ Args:
461
+ run_id: Unique identifier for run.
462
+ metric_key: Metric name within the run.
463
+ max_results: Maximum number of metric history events (steps) to return per paged
464
+ query.
465
+ page_token: A Token specifying the next paginated set of results of metric history.
466
+ This value is obtained as a return value from a paginated call to GetMetricHistory.
467
+
468
+ Returns:
469
+ A list of :py:class:`mlflow.entities.Metric` entities if logged, else empty list.
470
+ """
471
+
472
+ # NB: Pagination for this API is not supported in FileStore or SQLAlchemyStore. The
473
+ # argument `max_results` is used as a pagination activation flag. If the `max_results`
474
+ # argument is not provided, this API will return a full metric history event collection
475
+ # without the paged queries to the backend store.
476
+
477
+ def get_metric_history_bulk_interval_from_steps(self, run_id, metric_key, steps, max_results):
478
+ """
479
+ Return a list of metric objects corresponding to all values logged
480
+ for a given metric within a run for the specified steps.
481
+
482
+ Args:
483
+ run_id: Unique identifier for run.
484
+ metric_key: Metric name within the run.
485
+ steps: List of steps for which to return metrics.
486
+ max_results: Maximum number of metric history events (steps) to return.
487
+
488
+ Returns:
489
+ A list of MetricWithRunId objects:
490
+ - key: Metric name within the run.
491
+ - value: Metric value.
492
+ - timestamp: Metric timestamp.
493
+ - step: Metric step.
494
+ - run_id: Unique identifier for run.
495
+ """
496
+ metrics_for_run = sorted(
497
+ [m for m in self.get_metric_history(run_id, metric_key) if m.step in steps],
498
+ key=lambda metric: (metric.step, metric.timestamp),
499
+ )[:max_results]
500
+ return [
501
+ MetricWithRunId(
502
+ run_id=run_id,
503
+ metric=metric,
504
+ )
505
+ for metric in metrics_for_run
506
+ ]
507
+
508
+ def search_runs(
509
+ self,
510
+ experiment_ids,
511
+ filter_string,
512
+ run_view_type,
513
+ max_results=SEARCH_MAX_RESULTS_DEFAULT,
514
+ order_by=None,
515
+ page_token=None,
516
+ ):
517
+ """
518
+ Return runs that match the given list of search expressions within the experiments.
519
+
520
+ Args:
521
+ experiment_ids: List of experiment ids to scope the search.
522
+ filter_string: A search filter string.
523
+ run_view_type: ACTIVE_ONLY, DELETED_ONLY, or ALL runs.
524
+ max_results: Maximum number of runs desired.
525
+ order_by: List of order_by clauses.
526
+ page_token: Token specifying the next page of results. It should be obtained from
527
+ a ``search_runs`` call.
528
+
529
+ Returns:
530
+ A :py:class:`PagedList <mlflow.store.entities.PagedList>` of
531
+ :py:class:`Run <mlflow.entities.Run>` objects that satisfy the search expressions.
532
+ If the underlying tracking store supports pagination, the token for the next page may
533
+ be obtained via the ``token`` attribute of the returned object; however, some store
534
+ implementations may not support pagination and thus the returned token would not be
535
+ meaningful in such cases.
536
+ """
537
+ runs, token = self._search_runs(
538
+ experiment_ids,
539
+ filter_string,
540
+ run_view_type,
541
+ max_results,
542
+ order_by,
543
+ page_token,
544
+ )
545
+ return PagedList(runs, token)
546
+
547
+ @abstractmethod
548
+ def _search_runs(
549
+ self,
550
+ experiment_ids,
551
+ filter_string,
552
+ run_view_type,
553
+ max_results,
554
+ order_by,
555
+ page_token,
556
+ ):
557
+ """
558
+ Return runs that match the given list of search expressions within the experiments, as
559
+ well as a pagination token (indicating where the next page should start). Subclasses of
560
+ ``AbstractStore`` should implement this method to support pagination instead of
561
+ ``search_runs``.
562
+
563
+ See ``search_runs`` for parameter descriptions.
564
+
565
+ Returns:
566
+ A tuple of ``runs`` and ``token`` where ``runs`` is a list of
567
+ :py:class:`mlflow.entities.Run` objects that satisfy the search expressions,
568
+ and ``token`` is the pagination token for the next page of results.
569
+ """
570
+
571
+ @abstractmethod
572
+ def log_batch(self, run_id, metrics, params, tags):
573
+ """
574
+ Log multiple metrics, params, and tags for the specified run
575
+
576
+ Args:
577
+ run_id: String id for the run
578
+ metrics: List of :py:class:`mlflow.entities.Metric` instances to log
579
+ params: List of :py:class:`mlflow.entities.Param` instances to log
580
+ tags: List of :py:class:`mlflow.entities.RunTag` instances to log
581
+
582
+ Returns:
583
+ None.
584
+ """
585
+
586
+ def log_batch_async(self, run_id, metrics, params, tags) -> RunOperations:
587
+ """
588
+ Log multiple metrics, params, and tags for the specified run in async fashion.
589
+ This API does not offer immediate consistency of the data. When API returns,
590
+ data is accepted but not persisted/processed by back end. Data would be processed
591
+ in near real time fashion.
592
+
593
+ Args:
594
+ run_id: String id for the run.
595
+ metrics: List of :py:class:`mlflow.entities.Metric` instances to log.
596
+ params: List of :py:class:`mlflow.entities.Param` instances to log.
597
+ tags: List of :py:class:`mlflow.entities.RunTag` instances to log.
598
+
599
+ Returns:
600
+ An :py:class:`mlflow.utils.async_logging.run_operations.RunOperations` instance
601
+ that represents future for logging operation.
602
+ """
603
+ if not self._async_logging_queue.is_active():
604
+ self._async_logging_queue.activate()
605
+
606
+ return self._async_logging_queue.log_batch_async(
607
+ run_id=run_id, metrics=metrics, params=params, tags=tags
608
+ )
609
+
610
+ def end_async_logging(self):
611
+ """
612
+ Ends the async logging queue. This method is a no-op if the queue is not active. This is
613
+ different from flush as it just stops the async logging queue from accepting
614
+ new data (moving the queue state TEAR_DOWN state), but flush will ensure all data
615
+ is processed before returning (moving the queue to IDLE state).
616
+ """
617
+ if self._async_logging_queue.is_active():
618
+ self._async_logging_queue.end_async_logging()
619
+
620
+ def flush_async_logging(self):
621
+ """
622
+ Flushes the async logging queue. This method is a no-op if the queue is already
623
+ at IDLE state. This methods also shutdown the logging worker threads.
624
+ After flushing, logging thread is setup again.
625
+ """
626
+ if not self._async_logging_queue.is_idle():
627
+ self._async_logging_queue.flush()
628
+
629
+ def shut_down_async_logging(self):
630
+ """
631
+ Shuts down the async logging queue. This method is a no-op if the queue is already
632
+ at IDLE state. This methods also shutdown the logging worker threads.
633
+ """
634
+ if not self._async_logging_queue.is_idle():
635
+ self._async_logging_queue.shut_down_async_logging()
636
+
637
+ @abstractmethod
638
+ def log_inputs(
639
+ self,
640
+ run_id: str,
641
+ datasets: Optional[list[DatasetInput]] = None,
642
+ models: Optional[list[LoggedModelInput]] = None,
643
+ ):
644
+ """
645
+ Log inputs, such as datasets, to the specified run.
646
+
647
+ Args:
648
+ run_id: String id for the run
649
+ datasets: List of :py:class:`mlflow.entities.DatasetInput` instances to log
650
+ as inputs to the run.
651
+ models: List of :py:class:`mlflow.entities.LoggedModelInput` instances to log
652
+ as inputs to the run.
653
+
654
+ Returns:
655
+ None.
656
+ """
657
+
658
+ def log_outputs(self, run_id: str, models: list[LoggedModelOutput]):
659
+ """
660
+ Log outputs, such as models, to the specified run.
661
+
662
+ Args:
663
+ run_id: String id for the run
664
+ models: List of :py:class:`mlflow.entities.LoggedModelOutput` instances to log
665
+ as outputs of the run.
666
+
667
+ Returns:
668
+ None.
669
+ """
670
+ raise NotImplementedError(self.__class__.__name__)
671
+
672
+ def record_logged_model(self, run_id, mlflow_model):
673
+ raise NotImplementedError(self.__class__.__name__)
674
+
675
+ def create_logged_model(
676
+ self,
677
+ experiment_id: str,
678
+ name: Optional[str] = None,
679
+ source_run_id: Optional[str] = None,
680
+ tags: Optional[list[LoggedModelTag]] = None,
681
+ params: Optional[list[LoggedModelParameter]] = None,
682
+ model_type: Optional[str] = None,
683
+ ) -> LoggedModel:
684
+ """
685
+ Create a new logged model.
686
+
687
+ Args:
688
+ experiment_id: ID of the experiment to which the model belongs.
689
+ name: Name of the model. If not specified, a random name will be generated.
690
+ source_run_id: ID of the run that produced the model.
691
+ tags: Tags to set on the model.
692
+ params: Parameters to set on the model.
693
+ model_type: Type of the model.
694
+
695
+ Returns:
696
+ The created model.
697
+ """
698
+ raise NotImplementedError(self.__class__.__name__)
699
+
700
+ def search_logged_models(
701
+ self,
702
+ experiment_ids: list[str],
703
+ filter_string: Optional[str] = None,
704
+ datasets: Optional[list[dict[str, Any]]] = None,
705
+ max_results: Optional[int] = None,
706
+ order_by: Optional[list[dict[str, Any]]] = None,
707
+ page_token: Optional[str] = None,
708
+ ) -> PagedList[LoggedModel]:
709
+ """
710
+ Search for logged models that match the specified search criteria.
711
+
712
+ Args:
713
+ experiment_ids: List of experiment ids to scope the search.
714
+ filter_string: A search filter string.
715
+ datasets: List of dictionaries to specify datasets on which to apply metrics filters.
716
+ The following fields are supported:
717
+
718
+ name (str): Required. Name of the dataset.
719
+ digest (str): Optional. Digest of the dataset.
720
+ max_results: Maximum number of logged models desired.
721
+ order_by: List of dictionaries to specify the ordering of the search results.
722
+ The following fields are supported:
723
+
724
+ field_name (str): Required. Name of the field to order by, e.g. "metrics.accuracy".
725
+ ascending: (bool): Optional. Whether the order is ascending or not.
726
+ dataset_name: (str): Optional. If ``field_name`` refers to a metric, this field
727
+ specifies the name of the dataset associated with the metric. Only metrics
728
+ associated with the specified dataset name will be considered for ordering.
729
+ This field may only be set if ``field_name`` refers to a metric.
730
+ dataset_digest (str): Optional. If ``field_name`` refers to a metric, this field
731
+ specifies the digest of the dataset associated with the metric. Only metrics
732
+ associated with the specified dataset name and digest will be considered for
733
+ ordering. This field may only be set if ``dataset_name`` is also set.
734
+ page_token: Token specifying the next page of results.
735
+
736
+ Returns:
737
+ A :py:class:`PagedList <mlflow.store.entities.PagedList>` of
738
+ :py:class:`LoggedModel <mlflow.entities.LoggedModel>` objects.
739
+ """
740
+
741
+ raise NotImplementedError(self.__class__.__name__)
742
+
743
+ def finalize_logged_model(self, model_id: str, status: LoggedModelStatus) -> LoggedModel:
744
+ """
745
+ Finalize a model by updating its status.
746
+
747
+ Args:
748
+ model_id: ID of the model to finalize.
749
+ status: Final status to set on the model.
750
+
751
+ Returns:
752
+ The updated model.
753
+ """
754
+ raise NotImplementedError(self.__class__.__name__)
755
+
756
+ def set_logged_model_tags(self, model_id: str, tags: list[LoggedModelTag]) -> None:
757
+ """
758
+ Set tags on the specified logged model.
759
+
760
+ Args:
761
+ model_id: ID of the model.
762
+ tags: Tags to set on the model.
763
+
764
+ Returns:
765
+ None
766
+ """
767
+ raise NotImplementedError(self.__class__.__name__)
768
+
769
+ def set_model_versions_tags(self, name: str, version: str, model_id: str) -> None:
770
+ mvs = [{"name": name, "version": version}]
771
+ model = self.get_logged_model(model_id)
772
+ if existing_mvs := model.tags.get(mlflow_tags.MLFLOW_MODEL_VERSIONS):
773
+ existing_mvs = json.loads(existing_mvs)
774
+ if mvs[0] not in existing_mvs:
775
+ mvs = existing_mvs + mvs
776
+
777
+ self.set_logged_model_tags(
778
+ model_id,
779
+ [
780
+ LoggedModelTag(
781
+ key=mlflow_tags.MLFLOW_MODEL_VERSIONS,
782
+ value=json.dumps(mvs),
783
+ )
784
+ ],
785
+ )
786
+
787
+ def delete_logged_model_tag(self, model_id: str, key: str) -> None:
788
+ """
789
+ Delete a tag from the specified logged model.
790
+
791
+ Args:
792
+ model_id: ID of the model.
793
+ key: Key of the tag to delete.
794
+ """
795
+ raise NotImplementedError(self.__class__.__name__)
796
+
797
+ def get_logged_model(self, model_id: str) -> LoggedModel:
798
+ """
799
+ Fetch the logged model with the specified ID.
800
+
801
+ Args:
802
+ model_id: ID of the model to fetch.
803
+
804
+ Returns:
805
+ The fetched model.
806
+ """
807
+ raise NotImplementedError(self.__class__.__name__)
808
+
809
+ def delete_logged_model(self, model_id: str) -> None:
810
+ """
811
+ Delete the logged model with the specified ID.
812
+
813
+ Args:
814
+ model_id: ID of the model to delete.
815
+ """
816
+ raise NotImplementedError(self.__class__.__name__)