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,201 @@
1
+ """
2
+ THE 'mlflow.evaluation` MODULE IS LEGACY AND WILL BE REMOVED SOON. PLEASE DO NOT USE THESE CLASSES
3
+ IN NEW CODE. INSTEAD, USE `mlflow/entities/assessment.py` FOR ASSESSMENT CLASSES.
4
+ """
5
+
6
+ import pandas as pd
7
+
8
+ from mlflow.evaluation.evaluation import EvaluationEntity as EvaluationEntity
9
+ from mlflow.utils.annotations import deprecated
10
+
11
+
12
+ @deprecated(since="3.0.0")
13
+ def evaluations_to_dataframes(
14
+ evaluations: list[EvaluationEntity],
15
+ ) -> tuple[pd.DataFrame, pd.DataFrame, pd.DataFrame, pd.DataFrame]:
16
+ """
17
+ Converts a list of Evaluation entities to four separate DataFrames: one for main evaluation
18
+ data (excluding assessments and metrics), one for metrics, one for assessments, and one for
19
+ tags.
20
+
21
+ Args:
22
+ evaluations (List[Evaluation]): List of Evaluation entities.
23
+
24
+ Returns:
25
+ Tuple[pd.DataFrame, pd.DataFrame, pd.DataFrame, pd.DataFrame]: A tuple of four DataFrames
26
+ containing evaluation data, metrics data, assessments data, and tags data.
27
+ """
28
+ evaluations_data = []
29
+ metrics_data = []
30
+ assessments_data = []
31
+ tags_data = []
32
+
33
+ for evaluation in evaluations:
34
+ eval_dict = evaluation.to_dictionary()
35
+
36
+ # Extract assessment and metrics
37
+ assessments_list = eval_dict.pop("assessments", [])
38
+ metrics_list = eval_dict.pop("metrics", [])
39
+ tags_list = eval_dict.pop("tags", [])
40
+
41
+ evaluations_data.append(eval_dict)
42
+
43
+ for metric_dict in metrics_list:
44
+ metric_dict["evaluation_id"] = eval_dict["evaluation_id"]
45
+ # Remove 'step' key if it exists, since it is not valid for evaluation metrics
46
+ metric_dict.pop("step", None)
47
+ metrics_data.append(metric_dict)
48
+
49
+ for assess_dict in assessments_list:
50
+ assess_dict["evaluation_id"] = eval_dict["evaluation_id"]
51
+ assessments_data.append(assess_dict)
52
+
53
+ for tag_dict in tags_list:
54
+ tag_dict["evaluation_id"] = eval_dict["evaluation_id"]
55
+ tags_data.append(tag_dict)
56
+
57
+ evaluations_df = (
58
+ _apply_schema_to_dataframe(
59
+ pd.DataFrame(evaluations_data), _get_evaluations_dataframe_schema()
60
+ )
61
+ if evaluations_data
62
+ else _get_empty_evaluations_dataframe()
63
+ )
64
+ metrics_df = (
65
+ _apply_schema_to_dataframe(pd.DataFrame(metrics_data), _get_metrics_dataframe_schema())
66
+ if metrics_data
67
+ else _get_empty_metrics_dataframe()
68
+ )
69
+ assessments_df = (
70
+ _apply_schema_to_dataframe(
71
+ pd.DataFrame(assessments_data), _get_assessments_dataframe_schema()
72
+ )
73
+ if assessments_data
74
+ else _get_empty_assessments_dataframe()
75
+ )
76
+ tags_df = (
77
+ _apply_schema_to_dataframe(pd.DataFrame(tags_data), _get_tags_dataframe_schema())
78
+ if tags_data
79
+ else _get_empty_tags_dataframe()
80
+ )
81
+
82
+ return evaluations_df, metrics_df, assessments_df, tags_df
83
+
84
+
85
+ def _get_evaluations_dataframe_schema() -> dict[str, str]:
86
+ """
87
+ Returns the pandas schema for the evaluation DataFrame.
88
+ """
89
+ return {
90
+ "evaluation_id": "string",
91
+ "run_id": "string",
92
+ "inputs_id": "string",
93
+ "inputs": "object",
94
+ "outputs": "object",
95
+ "request_id": "object",
96
+ "targets": "object",
97
+ "error_code": "object",
98
+ "error_message": "object",
99
+ }
100
+
101
+
102
+ def _get_empty_evaluations_dataframe() -> pd.DataFrame:
103
+ """
104
+ Creates an empty DataFrame with columns for evaluation data.
105
+ """
106
+ schema = _get_evaluations_dataframe_schema()
107
+ df = pd.DataFrame(columns=schema.keys())
108
+ return _apply_schema_to_dataframe(df, schema)
109
+
110
+
111
+ def _get_assessments_dataframe_schema() -> dict[str, str]:
112
+ """
113
+ Returns the pandas schema for the assessments DataFrame.
114
+ """
115
+ return {
116
+ "evaluation_id": "string",
117
+ "name": "string",
118
+ "source": "object",
119
+ "timestamp": "int64",
120
+ "boolean_value": "object",
121
+ "numeric_value": "object",
122
+ "string_value": "object",
123
+ "rationale": "object",
124
+ "metadata": "object",
125
+ "error_code": "object",
126
+ "error_message": "object",
127
+ "span_id": "object",
128
+ }
129
+
130
+
131
+ def _get_empty_assessments_dataframe() -> pd.DataFrame:
132
+ """
133
+ Creates an empty DataFrame with columns for evaluation assessments data.
134
+ """
135
+ schema = _get_assessments_dataframe_schema()
136
+ df = pd.DataFrame(columns=schema.keys())
137
+ return _apply_schema_to_dataframe(df, schema)
138
+
139
+
140
+ def _get_metrics_dataframe_schema() -> dict[str, str]:
141
+ """
142
+ Returns the pandas schema for the metrics DataFrame.
143
+ """
144
+ return {
145
+ "evaluation_id": "string",
146
+ "key": "string",
147
+ "value": "float64",
148
+ "timestamp": "int64",
149
+ "model_id": "string",
150
+ "dataset_name": "string",
151
+ "dataset_digest": "string",
152
+ "run_id": "string",
153
+ }
154
+
155
+
156
+ def _get_empty_metrics_dataframe() -> pd.DataFrame:
157
+ """
158
+ Creates an empty DataFrame with columns for evaluation metric data.
159
+ """
160
+ schema = _get_metrics_dataframe_schema()
161
+ df = pd.DataFrame(columns=schema.keys())
162
+ return _apply_schema_to_dataframe(df, schema)
163
+
164
+
165
+ def _get_tags_dataframe_schema() -> dict[str, str]:
166
+ """
167
+ Returns the pandas schema for the tags DataFrame.
168
+ """
169
+ return {
170
+ "evaluation_id": "string",
171
+ "key": "string",
172
+ "value": "string",
173
+ }
174
+
175
+
176
+ def _get_empty_tags_dataframe() -> pd.DataFrame:
177
+ """
178
+ Creates an empty DataFrame with columns for evaluation tags data.
179
+ """
180
+ schema = _get_tags_dataframe_schema()
181
+ df = pd.DataFrame(columns=schema.keys())
182
+ return _apply_schema_to_dataframe(df, schema)
183
+
184
+
185
+ def _apply_schema_to_dataframe(df: pd.DataFrame, schema: dict[str, str]) -> pd.DataFrame:
186
+ """
187
+ Applies a schema to a DataFrame.
188
+
189
+ Args:
190
+ df (pd.DataFrame): DataFrame to apply the schema to.
191
+ schema (Dict[str, Any]): Schema to apply.
192
+
193
+ Returns:
194
+ pd.DataFrame: DataFrame with schema applied.
195
+ """
196
+ for column in df.columns:
197
+ df[column] = df[column].astype(schema[column])
198
+ # By default, null values are represented as `pd.NA` in pandas when reading a dataframe from
199
+ # JSON. However, MLflow entities use `None` to represent null values. Accordingly, we convert
200
+ # instances of pd.NA to None so that DataFrame rows can be parsed as MLflow entities
201
+ return df.replace(pd.NA, None)
mlflow/exceptions.py ADDED
@@ -0,0 +1,213 @@
1
+ import json
2
+ import logging
3
+ from typing import Optional
4
+
5
+ from mlflow.protos.databricks_pb2 import (
6
+ ABORTED,
7
+ ALREADY_EXISTS,
8
+ BAD_REQUEST,
9
+ CANCELLED,
10
+ CUSTOMER_UNAUTHORIZED,
11
+ DATA_LOSS,
12
+ DEADLINE_EXCEEDED,
13
+ ENDPOINT_NOT_FOUND,
14
+ INTERNAL_ERROR,
15
+ INVALID_PARAMETER_VALUE,
16
+ INVALID_STATE,
17
+ NOT_FOUND,
18
+ NOT_IMPLEMENTED,
19
+ PERMISSION_DENIED,
20
+ REQUEST_LIMIT_EXCEEDED,
21
+ RESOURCE_ALREADY_EXISTS,
22
+ RESOURCE_CONFLICT,
23
+ RESOURCE_DOES_NOT_EXIST,
24
+ RESOURCE_EXHAUSTED,
25
+ TEMPORARILY_UNAVAILABLE,
26
+ UNAUTHENTICATED,
27
+ ErrorCode,
28
+ )
29
+
30
+ ERROR_CODE_TO_HTTP_STATUS = {
31
+ ErrorCode.Name(INTERNAL_ERROR): 500,
32
+ ErrorCode.Name(INVALID_STATE): 500,
33
+ ErrorCode.Name(DATA_LOSS): 500,
34
+ ErrorCode.Name(NOT_IMPLEMENTED): 501,
35
+ ErrorCode.Name(TEMPORARILY_UNAVAILABLE): 503,
36
+ ErrorCode.Name(DEADLINE_EXCEEDED): 504,
37
+ ErrorCode.Name(REQUEST_LIMIT_EXCEEDED): 429,
38
+ ErrorCode.Name(CANCELLED): 499,
39
+ ErrorCode.Name(RESOURCE_EXHAUSTED): 429,
40
+ ErrorCode.Name(ABORTED): 409,
41
+ ErrorCode.Name(RESOURCE_CONFLICT): 409,
42
+ ErrorCode.Name(ALREADY_EXISTS): 409,
43
+ ErrorCode.Name(NOT_FOUND): 404,
44
+ ErrorCode.Name(ENDPOINT_NOT_FOUND): 404,
45
+ ErrorCode.Name(RESOURCE_DOES_NOT_EXIST): 404,
46
+ ErrorCode.Name(PERMISSION_DENIED): 403,
47
+ ErrorCode.Name(CUSTOMER_UNAUTHORIZED): 401,
48
+ ErrorCode.Name(UNAUTHENTICATED): 401,
49
+ ErrorCode.Name(BAD_REQUEST): 400,
50
+ ErrorCode.Name(RESOURCE_ALREADY_EXISTS): 400,
51
+ ErrorCode.Name(INVALID_PARAMETER_VALUE): 400,
52
+ }
53
+
54
+ HTTP_STATUS_TO_ERROR_CODE = {v: k for k, v in ERROR_CODE_TO_HTTP_STATUS.items()}
55
+ HTTP_STATUS_TO_ERROR_CODE[400] = ErrorCode.Name(BAD_REQUEST)
56
+ HTTP_STATUS_TO_ERROR_CODE[404] = ErrorCode.Name(ENDPOINT_NOT_FOUND)
57
+ HTTP_STATUS_TO_ERROR_CODE[500] = ErrorCode.Name(INTERNAL_ERROR)
58
+
59
+ _logger = logging.getLogger(__name__)
60
+
61
+
62
+ def get_error_code(http_status):
63
+ return ErrorCode.Value(
64
+ HTTP_STATUS_TO_ERROR_CODE.get(http_status, ErrorCode.Name(INTERNAL_ERROR))
65
+ )
66
+
67
+
68
+ class MlflowException(Exception):
69
+ """
70
+ Generic exception thrown to surface failure information about external-facing operations.
71
+ The error message associated with this exception may be exposed to clients in HTTP responses
72
+ for debugging purposes. If the error text is sensitive, raise a generic `Exception` object
73
+ instead.
74
+ """
75
+
76
+ def __init__(self, message, error_code=INTERNAL_ERROR, **kwargs):
77
+ """
78
+ Args:
79
+ message: The message or exception describing the error that occurred. This will be
80
+ included in the exception's serialized JSON representation.
81
+ error_code: An appropriate error code for the error that occurred; it will be
82
+ included in the exception's serialized JSON representation. This should
83
+ be one of the codes listed in the `mlflow.protos.databricks_pb2` proto.
84
+ kwargs: Additional key-value pairs to include in the serialized JSON representation
85
+ of the MlflowException.
86
+ """
87
+ try:
88
+ self.error_code = ErrorCode.Name(error_code)
89
+ except (ValueError, TypeError):
90
+ self.error_code = ErrorCode.Name(INTERNAL_ERROR)
91
+ message = str(message)
92
+ self.message = message
93
+ self.json_kwargs = kwargs
94
+ super().__init__(message)
95
+
96
+ def serialize_as_json(self):
97
+ exception_dict = {"error_code": self.error_code, "message": self.message}
98
+ exception_dict.update(self.json_kwargs)
99
+ return json.dumps(exception_dict)
100
+
101
+ def get_http_status_code(self):
102
+ return ERROR_CODE_TO_HTTP_STATUS.get(self.error_code, 500)
103
+
104
+ @classmethod
105
+ def invalid_parameter_value(cls, message, **kwargs):
106
+ """Constructs an `MlflowException` object with the `INVALID_PARAMETER_VALUE` error code.
107
+
108
+ Args:
109
+ message: The message describing the error that occurred. This will be included in the
110
+ exception's serialized JSON representation.
111
+ kwargs: Additional key-value pairs to include in the serialized JSON representation
112
+ of the MlflowException.
113
+ """
114
+ return cls(message, error_code=INVALID_PARAMETER_VALUE, **kwargs)
115
+
116
+
117
+ class RestException(MlflowException):
118
+ """Exception thrown on non 200-level responses from the REST API"""
119
+
120
+ def __init__(self, json):
121
+ self.json = json
122
+
123
+ error_code = json.get("error_code", ErrorCode.Name(INTERNAL_ERROR))
124
+ message = "{}: {}".format(
125
+ error_code,
126
+ json["message"] if "message" in json else "Response: " + str(json),
127
+ )
128
+
129
+ try:
130
+ super().__init__(message, error_code=ErrorCode.Value(error_code))
131
+ except ValueError:
132
+ try:
133
+ # The `error_code` can be an http error code, in which case we convert it to the
134
+ # corresponding `ErrorCode`.
135
+ error_code = HTTP_STATUS_TO_ERROR_CODE[int(error_code)]
136
+ super().__init__(message, error_code=ErrorCode.Value(error_code))
137
+ except ValueError or KeyError:
138
+ _logger.warning(
139
+ f"Received error code not recognized by MLflow: {error_code}, this may "
140
+ "indicate your request encountered an error before reaching MLflow server, "
141
+ "e.g., within a proxy server or authentication / authorization service."
142
+ )
143
+ super().__init__(message)
144
+
145
+ def __reduce__(self):
146
+ """
147
+ Overriding `__reduce__` to make `RestException` instance pickle-able.
148
+ """
149
+ return RestException, (self.json,)
150
+
151
+
152
+ class ExecutionException(MlflowException):
153
+ """Exception thrown when executing a project fails"""
154
+
155
+
156
+ class MissingConfigException(MlflowException):
157
+ """Exception thrown when expected configuration file/directory not found"""
158
+
159
+
160
+ class InvalidUrlException(MlflowException):
161
+ """Exception thrown when a http request fails to send due to an invalid URL"""
162
+
163
+
164
+ class _UnsupportedMultipartUploadException(MlflowException):
165
+ """Exception thrown when multipart upload is unsupported by an artifact repository"""
166
+
167
+ MESSAGE = "Multipart upload is not supported for the current artifact repository"
168
+
169
+ def __init__(self):
170
+ super().__init__(self.MESSAGE, error_code=NOT_IMPLEMENTED)
171
+
172
+
173
+ class MlflowTracingException(MlflowException):
174
+ """
175
+ Exception thrown from tracing logic
176
+
177
+ Tracing logic should not block the main execution flow in general, hence this exception
178
+ is used to distinguish tracing related errors and handle them properly.
179
+ """
180
+
181
+ def __init__(self, message, error_code=INTERNAL_ERROR):
182
+ super().__init__(message, error_code=error_code)
183
+
184
+
185
+ class MlflowTraceDataException(MlflowTracingException):
186
+ """Exception thrown for trace data related error"""
187
+
188
+ def __init__(
189
+ self, error_code: str, request_id: Optional[str] = None, artifact_path: Optional[str] = None
190
+ ):
191
+ if request_id:
192
+ self.ctx = f"request_id={request_id}"
193
+ elif artifact_path:
194
+ self.ctx = f"path={artifact_path}"
195
+
196
+ if error_code == NOT_FOUND:
197
+ super().__init__(f"Trace data not found for {self.ctx}", error_code=error_code)
198
+ elif error_code == INVALID_STATE:
199
+ super().__init__(f"Trace data is corrupted for {self.ctx}", error_code=error_code)
200
+
201
+
202
+ class MlflowTraceDataNotFound(MlflowTraceDataException):
203
+ """Exception thrown when trace data is not found"""
204
+
205
+ def __init__(self, request_id: Optional[str] = None, artifact_path: Optional[str] = None):
206
+ super().__init__(NOT_FOUND, request_id, artifact_path)
207
+
208
+
209
+ class MlflowTraceDataCorrupted(MlflowTraceDataException):
210
+ """Exception thrown when trace data is corrupted"""
211
+
212
+ def __init__(self, request_id: Optional[str] = None, artifact_path: Optional[str] = None):
213
+ super().__init__(INVALID_STATE, request_id, artifact_path)
mlflow/experiments.py ADDED
@@ -0,0 +1,140 @@
1
+ import os
2
+
3
+ import click
4
+
5
+ import mlflow
6
+ from mlflow.entities import ViewType
7
+ from mlflow.tracking import _get_store, fluent
8
+ from mlflow.utils.data_utils import is_uri
9
+ from mlflow.utils.string_utils import _create_table
10
+
11
+ EXPERIMENT_ID = click.option("--experiment-id", "-x", type=click.STRING, required=True)
12
+
13
+
14
+ @click.group("experiments")
15
+ def commands():
16
+ """
17
+ Manage experiments. To manage experiments associated with a tracking server, set the
18
+ MLFLOW_TRACKING_URI environment variable to the URL of the desired server.
19
+ """
20
+
21
+
22
+ @commands.command()
23
+ @click.option("--experiment-name", "-n", type=click.STRING, required=True)
24
+ @click.option(
25
+ "--artifact-location",
26
+ "-l",
27
+ help="Base location for runs to store artifact results. Artifacts will be stored "
28
+ "at $artifact_location/$run_id/artifacts. See "
29
+ "https://mlflow.org/docs/latest/tracking.html#where-runs-are-recorded for "
30
+ "more info on the properties of artifact location. "
31
+ "If no location is provided, the tracking server will pick a default.",
32
+ )
33
+ def create(experiment_name, artifact_location):
34
+ """
35
+ Create an experiment.
36
+
37
+ All artifacts generated by runs related to this experiment will be stored under artifact
38
+ location, organized under specific run_id sub-directories.
39
+
40
+ Implementation of experiment and metadata store is dependent on backend storage. ``FileStore``
41
+ creates a folder for each experiment ID and stores metadata in ``meta.yaml``. Runs are stored
42
+ as subfolders.
43
+ """
44
+ store = _get_store()
45
+ exp_id = store.create_experiment(experiment_name, artifact_location)
46
+ click.echo(f"Created experiment '{experiment_name}' with id {exp_id}")
47
+
48
+
49
+ @commands.command("search")
50
+ @click.option(
51
+ "--view",
52
+ "-v",
53
+ default="active_only",
54
+ help="Select view type for experiments. Valid view types are "
55
+ "'active_only' (default), 'deleted_only', and 'all'.",
56
+ )
57
+ def search_experiments(view):
58
+ """
59
+ Search for experiments in the configured tracking server.
60
+ """
61
+ view_type = ViewType.from_string(view) if view else ViewType.ACTIVE_ONLY
62
+ experiments = mlflow.search_experiments(view_type=view_type)
63
+ table = [
64
+ [
65
+ exp.experiment_id,
66
+ exp.name,
67
+ exp.artifact_location
68
+ if is_uri(exp.artifact_location)
69
+ else os.path.abspath(exp.artifact_location),
70
+ ]
71
+ for exp in experiments
72
+ ]
73
+ click.echo(_create_table(sorted(table), headers=["Experiment Id", "Name", "Artifact Location"]))
74
+
75
+
76
+ @commands.command("delete")
77
+ @EXPERIMENT_ID
78
+ def delete_experiment(experiment_id):
79
+ """
80
+ Mark an active experiment for deletion. This also applies to experiment's metadata, runs and
81
+ associated data, and artifacts if they are store in default location. Use ``list`` command to
82
+ view artifact location. Command will throw an error if experiment is not found or already
83
+ marked for deletion.
84
+
85
+ Experiments marked for deletion can be restored using ``restore`` command, unless they are
86
+ permanently deleted.
87
+
88
+ Specific implementation of deletion is dependent on backend stores. ``FileStore`` moves
89
+ experiments marked for deletion under a ``.trash`` folder under the main folder used to
90
+ instantiate ``FileStore``. Experiments marked for deletion can be permanently deleted by
91
+ clearing the ``.trash`` folder. It is recommended to use a ``cron`` job or an alternate
92
+ workflow mechanism to clear ``.trash`` folder.
93
+ """
94
+ store = _get_store()
95
+ store.delete_experiment(experiment_id)
96
+ click.echo(f"Experiment with ID {experiment_id} has been deleted.")
97
+
98
+
99
+ @commands.command("restore")
100
+ @EXPERIMENT_ID
101
+ def restore_experiment(experiment_id):
102
+ """
103
+ Restore a deleted experiment. This also applies to experiment's metadata, runs and associated
104
+ data. The command throws an error if the experiment is already active, cannot be found, or
105
+ permanently deleted.
106
+ """
107
+ store = _get_store()
108
+ store.restore_experiment(experiment_id)
109
+ click.echo(f"Experiment with id {experiment_id} has been restored.")
110
+
111
+
112
+ @commands.command("rename")
113
+ @EXPERIMENT_ID
114
+ @click.option("--new-name", type=click.STRING, required=True)
115
+ def rename_experiment(experiment_id, new_name):
116
+ """
117
+ Renames an active experiment.
118
+ Returns an error if the experiment is inactive.
119
+ """
120
+ store = _get_store()
121
+ store.rename_experiment(experiment_id, new_name)
122
+ click.echo(f"Experiment with id {experiment_id} has been renamed to '{new_name}'.")
123
+
124
+
125
+ @commands.command("csv")
126
+ @EXPERIMENT_ID
127
+ @click.option("--filename", "-o", type=click.STRING)
128
+ def generate_csv_with_runs(experiment_id, filename):
129
+ # type: (str, str) -> None
130
+ """
131
+ Generate CSV with all runs for an experiment
132
+ """
133
+ runs = fluent.search_runs(experiment_ids=experiment_id)
134
+ if filename:
135
+ runs.to_csv(filename, index=False)
136
+ click.echo(
137
+ f"Experiment with ID {experiment_id} has been exported as a CSV to file: {filename}."
138
+ )
139
+ else:
140
+ click.echo(runs.to_csv(index=False))
@@ -0,0 +1,81 @@
1
+ """
2
+ The ``mlflow.gemini`` module provides an API for tracing the interaction with Gemini models.
3
+ """
4
+
5
+ from mlflow.gemini.autolog import (
6
+ patched_class_call,
7
+ patched_module_call,
8
+ )
9
+ from mlflow.utils.annotations import experimental
10
+ from mlflow.utils.autologging_utils import autologging_integration, safe_patch
11
+
12
+ FLAVOR_NAME = "gemini"
13
+
14
+
15
+ @experimental(version="2.19.0")
16
+ @autologging_integration(FLAVOR_NAME)
17
+ def autolog(
18
+ log_traces: bool = True,
19
+ disable: bool = False,
20
+ silent: bool = False,
21
+ ):
22
+ """
23
+ Enables (or disables) and configures autologging from Gemini to MLflow.
24
+ Currently, both legacy SDK google-generativeai and new SDK google-genai are supported.
25
+ Only synchronous calls are supported. Asynchronous APIs and streaming are not recorded.
26
+
27
+ Args:
28
+ log_traces: If ``True``, traces are logged for Gemini models.
29
+ If ``False``, no traces are collected during inference. Default to ``True``.
30
+ disable: If ``True``, disables the Gemini autologging. Default to ``False``.
31
+ silent: If ``True``, suppress all event logs and warnings from MLflow during Gemini
32
+ autologging. If ``False``, show all events and warnings.
33
+ """
34
+ try:
35
+ from google import generativeai
36
+
37
+ for method in ["generate_content", "count_tokens"]:
38
+ safe_patch(
39
+ FLAVOR_NAME,
40
+ generativeai.GenerativeModel,
41
+ method,
42
+ patched_class_call,
43
+ )
44
+
45
+ safe_patch(
46
+ FLAVOR_NAME,
47
+ generativeai.ChatSession,
48
+ "send_message",
49
+ patched_class_call,
50
+ )
51
+
52
+ safe_patch(
53
+ FLAVOR_NAME,
54
+ generativeai,
55
+ "embed_content",
56
+ patched_module_call,
57
+ )
58
+ except ImportError:
59
+ pass
60
+
61
+ try:
62
+ from google import genai
63
+
64
+ # Since the genai SDK calls "_generate_content" iteratively within "generate_content",
65
+ # we need to patch both "generate_content" and "_generate_content".
66
+ for method in ["generate_content", "_generate_content", "count_tokens", "embed_content"]:
67
+ safe_patch(
68
+ FLAVOR_NAME,
69
+ genai.models.Models,
70
+ method,
71
+ patched_class_call,
72
+ )
73
+
74
+ safe_patch(
75
+ FLAVOR_NAME,
76
+ genai.chats.Chat,
77
+ "send_message",
78
+ patched_class_call,
79
+ )
80
+ except ImportError:
81
+ pass