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,263 @@
1
+ from typing import Optional
2
+
3
+ from sqlalchemy.exc import IntegrityError, MultipleResultsFound, NoResultFound
4
+ from sqlalchemy.orm import sessionmaker
5
+ from werkzeug.security import check_password_hash, generate_password_hash
6
+
7
+ from mlflow.exceptions import MlflowException
8
+ from mlflow.protos.databricks_pb2 import (
9
+ INVALID_STATE,
10
+ RESOURCE_ALREADY_EXISTS,
11
+ RESOURCE_DOES_NOT_EXIST,
12
+ )
13
+ from mlflow.server.auth.db import utils as dbutils
14
+ from mlflow.server.auth.db.models import (
15
+ SqlExperimentPermission,
16
+ SqlRegisteredModelPermission,
17
+ SqlUser,
18
+ )
19
+ from mlflow.server.auth.entities import ExperimentPermission, RegisteredModelPermission, User
20
+ from mlflow.server.auth.permissions import _validate_permission
21
+ from mlflow.store.db.utils import _get_managed_session_maker, create_sqlalchemy_engine_with_retry
22
+ from mlflow.utils.uri import extract_db_type_from_uri
23
+ from mlflow.utils.validation import _validate_password, _validate_username
24
+
25
+
26
+ class SqlAlchemyStore:
27
+ def init_db(self, db_uri):
28
+ self.db_uri = db_uri
29
+ self.db_type = extract_db_type_from_uri(db_uri)
30
+ self.engine = create_sqlalchemy_engine_with_retry(db_uri)
31
+ dbutils.migrate_if_needed(self.engine, "head")
32
+ SessionMaker = sessionmaker(bind=self.engine)
33
+ self.ManagedSessionMaker = _get_managed_session_maker(SessionMaker, self.db_type)
34
+
35
+ def authenticate_user(self, username: str, password: str) -> bool:
36
+ with self.ManagedSessionMaker() as session:
37
+ try:
38
+ user = self._get_user(session, username)
39
+ return check_password_hash(user.password_hash, password)
40
+ except MlflowException:
41
+ return False
42
+
43
+ def create_user(self, username: str, password: str, is_admin: bool = False) -> User:
44
+ _validate_username(username)
45
+ _validate_password(password)
46
+ pwhash = generate_password_hash(password)
47
+ with self.ManagedSessionMaker() as session:
48
+ try:
49
+ user = SqlUser(username=username, password_hash=pwhash, is_admin=is_admin)
50
+ session.add(user)
51
+ session.flush()
52
+ return user.to_mlflow_entity()
53
+ except IntegrityError as e:
54
+ raise MlflowException(
55
+ f"User (username={username}) already exists. Error: {e}",
56
+ RESOURCE_ALREADY_EXISTS,
57
+ ) from e
58
+
59
+ @staticmethod
60
+ def _get_user(session, username: str) -> SqlUser:
61
+ try:
62
+ return session.query(SqlUser).filter(SqlUser.username == username).one()
63
+ except NoResultFound:
64
+ raise MlflowException(
65
+ f"User with username={username} not found",
66
+ RESOURCE_DOES_NOT_EXIST,
67
+ )
68
+ except MultipleResultsFound:
69
+ raise MlflowException(
70
+ f"Found multiple users with username={username}",
71
+ INVALID_STATE,
72
+ )
73
+
74
+ def has_user(self, username: str) -> bool:
75
+ with self.ManagedSessionMaker() as session:
76
+ return session.query(SqlUser).filter(SqlUser.username == username).first() is not None
77
+
78
+ def get_user(self, username: str) -> User:
79
+ with self.ManagedSessionMaker() as session:
80
+ return self._get_user(session, username).to_mlflow_entity()
81
+
82
+ def list_users(self) -> list[User]:
83
+ with self.ManagedSessionMaker() as session:
84
+ users = session.query(SqlUser).all()
85
+ return [u.to_mlflow_entity() for u in users]
86
+
87
+ def update_user(
88
+ self, username: str, password: Optional[str] = None, is_admin: Optional[bool] = None
89
+ ) -> User:
90
+ with self.ManagedSessionMaker() as session:
91
+ user = self._get_user(session, username)
92
+ if password is not None:
93
+ pwhash = generate_password_hash(password)
94
+ user.password_hash = pwhash
95
+ if is_admin is not None:
96
+ user.is_admin = is_admin
97
+ return user.to_mlflow_entity()
98
+
99
+ def delete_user(self, username: str):
100
+ with self.ManagedSessionMaker() as session:
101
+ user = self._get_user(session, username)
102
+ session.delete(user)
103
+
104
+ def create_experiment_permission(
105
+ self, experiment_id: str, username: str, permission: str
106
+ ) -> ExperimentPermission:
107
+ _validate_permission(permission)
108
+ with self.ManagedSessionMaker() as session:
109
+ try:
110
+ user = self._get_user(session, username=username)
111
+ perm = SqlExperimentPermission(
112
+ experiment_id=experiment_id, user_id=user.id, permission=permission
113
+ )
114
+ session.add(perm)
115
+ session.flush()
116
+ return perm.to_mlflow_entity()
117
+ except IntegrityError as e:
118
+ raise MlflowException(
119
+ f"Experiment permission (experiment_id={experiment_id}, username={username}) "
120
+ f"already exists. Error: {e}",
121
+ RESOURCE_ALREADY_EXISTS,
122
+ )
123
+
124
+ def _get_experiment_permission(
125
+ self, session, experiment_id: str, username: str
126
+ ) -> SqlExperimentPermission:
127
+ try:
128
+ user = self._get_user(session, username=username)
129
+ return (
130
+ session.query(SqlExperimentPermission)
131
+ .filter(
132
+ SqlExperimentPermission.experiment_id == experiment_id,
133
+ SqlExperimentPermission.user_id == user.id,
134
+ )
135
+ .one()
136
+ )
137
+ except NoResultFound:
138
+ raise MlflowException(
139
+ f"Experiment permission with experiment_id={experiment_id} and "
140
+ f"username={username} not found",
141
+ RESOURCE_DOES_NOT_EXIST,
142
+ )
143
+ except MultipleResultsFound:
144
+ raise MlflowException(
145
+ f"Found multiple experiment permissions with experiment_id={experiment_id} "
146
+ f"and username={username}",
147
+ INVALID_STATE,
148
+ )
149
+
150
+ def get_experiment_permission(self, experiment_id: str, username: str) -> ExperimentPermission:
151
+ with self.ManagedSessionMaker() as session:
152
+ return self._get_experiment_permission(
153
+ session, experiment_id, username
154
+ ).to_mlflow_entity()
155
+
156
+ def list_experiment_permissions(self, username: str) -> list[ExperimentPermission]:
157
+ with self.ManagedSessionMaker() as session:
158
+ user = self._get_user(session, username=username)
159
+ perms = (
160
+ session.query(SqlExperimentPermission)
161
+ .filter(SqlExperimentPermission.user_id == user.id)
162
+ .all()
163
+ )
164
+ return [p.to_mlflow_entity() for p in perms]
165
+
166
+ def update_experiment_permission(
167
+ self, experiment_id: str, username: str, permission: str
168
+ ) -> ExperimentPermission:
169
+ _validate_permission(permission)
170
+ with self.ManagedSessionMaker() as session:
171
+ perm = self._get_experiment_permission(session, experiment_id, username)
172
+ perm.permission = permission
173
+ return perm.to_mlflow_entity()
174
+
175
+ def delete_experiment_permission(self, experiment_id: str, username: str):
176
+ with self.ManagedSessionMaker() as session:
177
+ perm = self._get_experiment_permission(session, experiment_id, username)
178
+ session.delete(perm)
179
+
180
+ def create_registered_model_permission(
181
+ self, name: str, username: str, permission: str
182
+ ) -> RegisteredModelPermission:
183
+ _validate_permission(permission)
184
+ with self.ManagedSessionMaker() as session:
185
+ try:
186
+ user = self._get_user(session, username=username)
187
+ perm = SqlRegisteredModelPermission(
188
+ name=name, user_id=user.id, permission=permission
189
+ )
190
+ session.add(perm)
191
+ session.flush()
192
+ return perm.to_mlflow_entity()
193
+ except IntegrityError as e:
194
+ raise MlflowException(
195
+ f"Registered model permission (name={name}, username={username}) "
196
+ f"already exists. Error: {e}",
197
+ RESOURCE_ALREADY_EXISTS,
198
+ )
199
+
200
+ def _get_registered_model_permission(
201
+ self, session, name: str, username: str
202
+ ) -> SqlRegisteredModelPermission:
203
+ try:
204
+ user = self._get_user(session, username=username)
205
+ return (
206
+ session.query(SqlRegisteredModelPermission)
207
+ .filter(
208
+ SqlRegisteredModelPermission.name == name,
209
+ SqlRegisteredModelPermission.user_id == user.id,
210
+ )
211
+ .one()
212
+ )
213
+ except NoResultFound:
214
+ raise MlflowException(
215
+ f"Registered model permission with name={name} and username={username} not found",
216
+ RESOURCE_DOES_NOT_EXIST,
217
+ )
218
+ except MultipleResultsFound:
219
+ raise MlflowException(
220
+ f"Found multiple registered model permissions with name={name} "
221
+ f"and username={username}",
222
+ INVALID_STATE,
223
+ )
224
+
225
+ def get_registered_model_permission(
226
+ self, name: str, username: str
227
+ ) -> RegisteredModelPermission:
228
+ with self.ManagedSessionMaker() as session:
229
+ return self._get_registered_model_permission(session, name, username).to_mlflow_entity()
230
+
231
+ def list_registered_model_permissions(self, username: str) -> list[RegisteredModelPermission]:
232
+ with self.ManagedSessionMaker() as session:
233
+ user = self._get_user(session, username=username)
234
+ perms = (
235
+ session.query(SqlRegisteredModelPermission)
236
+ .filter(SqlRegisteredModelPermission.user_id == user.id)
237
+ .all()
238
+ )
239
+ return [p.to_mlflow_entity() for p in perms]
240
+
241
+ def update_registered_model_permission(
242
+ self, name: str, username: str, permission: str
243
+ ) -> RegisteredModelPermission:
244
+ _validate_permission(permission)
245
+ with self.ManagedSessionMaker() as session:
246
+ perm = self._get_registered_model_permission(session, name, username)
247
+ perm.permission = permission
248
+ return perm.to_mlflow_entity()
249
+
250
+ def delete_registered_model_permission(self, name: str, username: str):
251
+ with self.ManagedSessionMaker() as session:
252
+ perm = self._get_registered_model_permission(session, name, username)
253
+ session.delete(perm)
254
+
255
+ def rename_registered_model_permissions(self, old_name: str, new_name: str):
256
+ with self.ManagedSessionMaker() as session:
257
+ perms = (
258
+ session.query(SqlRegisteredModelPermission)
259
+ .filter(SqlRegisteredModelPermission.name == old_name)
260
+ .all()
261
+ )
262
+ for perm in perms:
263
+ perm.name = new_name
File without changes
@@ -0,0 +1,353 @@
1
+ # GENERATED FILE. PLEASE DON'T MODIFY.
2
+ # Run python3 ./dev/proto_to_graphql/code_generator.py to regenerate.
3
+ import graphene
4
+ import mlflow
5
+ from mlflow.server.graphql.graphql_custom_scalars import LongString
6
+ from mlflow.server.graphql.graphql_errors import ApiError
7
+ from mlflow.utils.proto_json_utils import parse_dict
8
+
9
+
10
+ class MlflowDeploymentJobConnectionState(graphene.Enum):
11
+ DEPLOYMENT_JOB_CONNECTION_STATE_UNSPECIFIED = 1
12
+ NOT_SET_UP = 2
13
+ CONNECTED = 3
14
+ NOT_FOUND = 4
15
+ REQUIRED_PARAMETERS_CHANGED = 5
16
+
17
+
18
+ class MlflowModelVersionDeploymentJobStateDeploymentJobRunState(graphene.Enum):
19
+ DEPLOYMENT_JOB_RUN_STATE_UNSPECIFIED = 1
20
+ NO_VALID_DEPLOYMENT_JOB_FOUND = 2
21
+ RUNNING = 3
22
+ SUCCEEDED = 4
23
+ FAILED = 5
24
+ PENDING = 6
25
+ APPROVAL = 7
26
+
27
+
28
+ class MlflowModelVersionStatus(graphene.Enum):
29
+ PENDING_REGISTRATION = 1
30
+ FAILED_REGISTRATION = 2
31
+ READY = 3
32
+
33
+
34
+ class MlflowRunStatus(graphene.Enum):
35
+ RUNNING = 1
36
+ SCHEDULED = 2
37
+ FINISHED = 3
38
+ FAILED = 4
39
+ KILLED = 5
40
+
41
+
42
+ class MlflowViewType(graphene.Enum):
43
+ ACTIVE_ONLY = 1
44
+ DELETED_ONLY = 2
45
+ ALL = 3
46
+
47
+
48
+ class MlflowModelVersionDeploymentJobState(graphene.ObjectType):
49
+ job_id = graphene.String()
50
+ run_id = graphene.String()
51
+ job_state = graphene.Field(MlflowDeploymentJobConnectionState)
52
+ run_state = graphene.Field(MlflowModelVersionDeploymentJobStateDeploymentJobRunState)
53
+ current_task_name = graphene.String()
54
+
55
+
56
+ class MlflowModelMetric(graphene.ObjectType):
57
+ key = graphene.String()
58
+ value = graphene.Float()
59
+ timestamp = LongString()
60
+ step = LongString()
61
+ dataset_name = graphene.String()
62
+ dataset_digest = graphene.String()
63
+ model_id = graphene.String()
64
+ run_id = graphene.String()
65
+
66
+
67
+ class MlflowModelParam(graphene.ObjectType):
68
+ name = graphene.String()
69
+ value = graphene.String()
70
+
71
+
72
+ class MlflowModelVersionTag(graphene.ObjectType):
73
+ key = graphene.String()
74
+ value = graphene.String()
75
+
76
+
77
+ class MlflowModelVersion(graphene.ObjectType):
78
+ name = graphene.String()
79
+ version = graphene.String()
80
+ creation_timestamp = LongString()
81
+ last_updated_timestamp = LongString()
82
+ user_id = graphene.String()
83
+ current_stage = graphene.String()
84
+ description = graphene.String()
85
+ source = graphene.String()
86
+ run_id = graphene.String()
87
+ status = graphene.Field(MlflowModelVersionStatus)
88
+ status_message = graphene.String()
89
+ tags = graphene.List(graphene.NonNull(MlflowModelVersionTag))
90
+ run_link = graphene.String()
91
+ aliases = graphene.List(graphene.String)
92
+ model_id = graphene.String()
93
+ model_params = graphene.List(graphene.NonNull(MlflowModelParam))
94
+ model_metrics = graphene.List(graphene.NonNull(MlflowModelMetric))
95
+ deployment_job_state = graphene.Field(MlflowModelVersionDeploymentJobState)
96
+
97
+
98
+ class MlflowSearchModelVersionsResponse(graphene.ObjectType):
99
+ model_versions = graphene.List(graphene.NonNull(MlflowModelVersion))
100
+ next_page_token = graphene.String()
101
+ apiError = graphene.Field(ApiError)
102
+
103
+
104
+ class MlflowDatasetSummary(graphene.ObjectType):
105
+ experiment_id = graphene.String()
106
+ name = graphene.String()
107
+ digest = graphene.String()
108
+ context = graphene.String()
109
+
110
+
111
+ class MlflowSearchDatasetsResponse(graphene.ObjectType):
112
+ dataset_summaries = graphene.List(graphene.NonNull(MlflowDatasetSummary))
113
+ apiError = graphene.Field(ApiError)
114
+
115
+
116
+ class MlflowMetricWithRunId(graphene.ObjectType):
117
+ key = graphene.String()
118
+ value = graphene.Float()
119
+ timestamp = LongString()
120
+ step = LongString()
121
+ run_id = graphene.String()
122
+
123
+
124
+ class MlflowGetMetricHistoryBulkIntervalResponse(graphene.ObjectType):
125
+ metrics = graphene.List(graphene.NonNull(MlflowMetricWithRunId))
126
+ apiError = graphene.Field(ApiError)
127
+
128
+
129
+ class MlflowFileInfo(graphene.ObjectType):
130
+ path = graphene.String()
131
+ is_dir = graphene.Boolean()
132
+ file_size = LongString()
133
+
134
+
135
+ class MlflowListArtifactsResponse(graphene.ObjectType):
136
+ root_uri = graphene.String()
137
+ files = graphene.List(graphene.NonNull(MlflowFileInfo))
138
+ next_page_token = graphene.String()
139
+ apiError = graphene.Field(ApiError)
140
+
141
+
142
+ class MlflowModelOutput(graphene.ObjectType):
143
+ model_id = graphene.String()
144
+ step = LongString()
145
+
146
+
147
+ class MlflowRunOutputs(graphene.ObjectType):
148
+ model_outputs = graphene.List(graphene.NonNull(MlflowModelOutput))
149
+
150
+
151
+ class MlflowModelInput(graphene.ObjectType):
152
+ model_id = graphene.String()
153
+
154
+
155
+ class MlflowDataset(graphene.ObjectType):
156
+ name = graphene.String()
157
+ digest = graphene.String()
158
+ source_type = graphene.String()
159
+ source = graphene.String()
160
+ schema = graphene.String()
161
+ profile = graphene.String()
162
+
163
+
164
+ class MlflowInputTag(graphene.ObjectType):
165
+ key = graphene.String()
166
+ value = graphene.String()
167
+
168
+
169
+ class MlflowDatasetInput(graphene.ObjectType):
170
+ tags = graphene.List(graphene.NonNull(MlflowInputTag))
171
+ dataset = graphene.Field(MlflowDataset)
172
+
173
+
174
+ class MlflowRunInputs(graphene.ObjectType):
175
+ dataset_inputs = graphene.List(graphene.NonNull(MlflowDatasetInput))
176
+ model_inputs = graphene.List(graphene.NonNull(MlflowModelInput))
177
+
178
+
179
+ class MlflowRunTag(graphene.ObjectType):
180
+ key = graphene.String()
181
+ value = graphene.String()
182
+
183
+
184
+ class MlflowParam(graphene.ObjectType):
185
+ key = graphene.String()
186
+ value = graphene.String()
187
+
188
+
189
+ class MlflowMetric(graphene.ObjectType):
190
+ key = graphene.String()
191
+ value = graphene.Float()
192
+ timestamp = LongString()
193
+ step = LongString()
194
+ dataset_name = graphene.String()
195
+ dataset_digest = graphene.String()
196
+ model_id = graphene.String()
197
+ run_id = graphene.String()
198
+
199
+
200
+ class MlflowRunData(graphene.ObjectType):
201
+ metrics = graphene.List(graphene.NonNull(MlflowMetric))
202
+ params = graphene.List(graphene.NonNull(MlflowParam))
203
+ tags = graphene.List(graphene.NonNull(MlflowRunTag))
204
+
205
+
206
+ class MlflowRunInfo(graphene.ObjectType):
207
+ run_id = graphene.String()
208
+ run_uuid = graphene.String()
209
+ run_name = graphene.String()
210
+ experiment_id = graphene.String()
211
+ user_id = graphene.String()
212
+ status = graphene.Field(MlflowRunStatus)
213
+ start_time = LongString()
214
+ end_time = LongString()
215
+ artifact_uri = graphene.String()
216
+ lifecycle_stage = graphene.String()
217
+
218
+
219
+ class MlflowRun(graphene.ObjectType):
220
+ info = graphene.Field(MlflowRunInfo)
221
+ data = graphene.Field(MlflowRunData)
222
+ inputs = graphene.Field(MlflowRunInputs)
223
+ outputs = graphene.Field(MlflowRunOutputs)
224
+
225
+
226
+ class MlflowSearchRunsResponse(graphene.ObjectType):
227
+ runs = graphene.List(graphene.NonNull('mlflow.server.graphql.graphql_schema_extensions.MlflowRunExtension'))
228
+ next_page_token = graphene.String()
229
+ apiError = graphene.Field(ApiError)
230
+
231
+
232
+ class MlflowGetRunResponse(graphene.ObjectType):
233
+ run = graphene.Field('mlflow.server.graphql.graphql_schema_extensions.MlflowRunExtension')
234
+ apiError = graphene.Field(ApiError)
235
+
236
+
237
+ class MlflowExperimentTag(graphene.ObjectType):
238
+ key = graphene.String()
239
+ value = graphene.String()
240
+
241
+
242
+ class MlflowExperiment(graphene.ObjectType):
243
+ experiment_id = graphene.String()
244
+ name = graphene.String()
245
+ artifact_location = graphene.String()
246
+ lifecycle_stage = graphene.String()
247
+ last_update_time = LongString()
248
+ creation_time = LongString()
249
+ tags = graphene.List(graphene.NonNull(MlflowExperimentTag))
250
+
251
+
252
+ class MlflowGetExperimentResponse(graphene.ObjectType):
253
+ experiment = graphene.Field(MlflowExperiment)
254
+ apiError = graphene.Field(ApiError)
255
+
256
+
257
+ class MlflowSearchModelVersionsInput(graphene.InputObjectType):
258
+ filter = graphene.String()
259
+ max_results = LongString()
260
+ order_by = graphene.List(graphene.String)
261
+ page_token = graphene.String()
262
+
263
+
264
+ class MlflowSearchDatasetsInput(graphene.InputObjectType):
265
+ experiment_ids = graphene.List(graphene.String)
266
+
267
+
268
+ class MlflowGetMetricHistoryBulkIntervalInput(graphene.InputObjectType):
269
+ run_ids = graphene.List(graphene.String)
270
+ metric_key = graphene.String()
271
+ start_step = graphene.Int()
272
+ end_step = graphene.Int()
273
+ max_results = graphene.Int()
274
+
275
+
276
+ class MlflowListArtifactsInput(graphene.InputObjectType):
277
+ run_id = graphene.String()
278
+ run_uuid = graphene.String()
279
+ path = graphene.String()
280
+ page_token = graphene.String()
281
+
282
+
283
+ class MlflowSearchRunsInput(graphene.InputObjectType):
284
+ experiment_ids = graphene.List(graphene.String)
285
+ filter = graphene.String()
286
+ run_view_type = graphene.Field(MlflowViewType)
287
+ max_results = graphene.Int()
288
+ order_by = graphene.List(graphene.String)
289
+ page_token = graphene.String()
290
+
291
+
292
+ class MlflowGetRunInput(graphene.InputObjectType):
293
+ run_id = graphene.String()
294
+ run_uuid = graphene.String()
295
+
296
+
297
+ class MlflowGetExperimentInput(graphene.InputObjectType):
298
+ experiment_id = graphene.String()
299
+
300
+
301
+ class QueryType(graphene.ObjectType):
302
+ mlflow_get_experiment = graphene.Field(MlflowGetExperimentResponse, input=MlflowGetExperimentInput())
303
+ mlflow_get_metric_history_bulk_interval = graphene.Field(MlflowGetMetricHistoryBulkIntervalResponse, input=MlflowGetMetricHistoryBulkIntervalInput())
304
+ mlflow_get_run = graphene.Field(MlflowGetRunResponse, input=MlflowGetRunInput())
305
+ mlflow_list_artifacts = graphene.Field(MlflowListArtifactsResponse, input=MlflowListArtifactsInput())
306
+ mlflow_search_model_versions = graphene.Field(MlflowSearchModelVersionsResponse, input=MlflowSearchModelVersionsInput())
307
+
308
+ def resolve_mlflow_get_experiment(self, info, input):
309
+ input_dict = vars(input)
310
+ request_message = mlflow.protos.service_pb2.GetExperiment()
311
+ parse_dict(input_dict, request_message)
312
+ return mlflow.server.handlers.get_experiment_impl(request_message)
313
+
314
+ def resolve_mlflow_get_metric_history_bulk_interval(self, info, input):
315
+ input_dict = vars(input)
316
+ request_message = mlflow.protos.service_pb2.GetMetricHistoryBulkInterval()
317
+ parse_dict(input_dict, request_message)
318
+ return mlflow.server.handlers.get_metric_history_bulk_interval_impl(request_message)
319
+
320
+ def resolve_mlflow_get_run(self, info, input):
321
+ input_dict = vars(input)
322
+ request_message = mlflow.protos.service_pb2.GetRun()
323
+ parse_dict(input_dict, request_message)
324
+ return mlflow.server.handlers.get_run_impl(request_message)
325
+
326
+ def resolve_mlflow_list_artifacts(self, info, input):
327
+ input_dict = vars(input)
328
+ request_message = mlflow.protos.service_pb2.ListArtifacts()
329
+ parse_dict(input_dict, request_message)
330
+ return mlflow.server.handlers.list_artifacts_impl(request_message)
331
+
332
+ def resolve_mlflow_search_model_versions(self, info, input):
333
+ input_dict = vars(input)
334
+ request_message = mlflow.protos.model_registry_pb2.SearchModelVersions()
335
+ parse_dict(input_dict, request_message)
336
+ return mlflow.server.handlers.search_model_versions_impl(request_message)
337
+
338
+
339
+ class MutationType(graphene.ObjectType):
340
+ mlflow_search_datasets = graphene.Field(MlflowSearchDatasetsResponse, input=MlflowSearchDatasetsInput())
341
+ mlflow_search_runs = graphene.Field(MlflowSearchRunsResponse, input=MlflowSearchRunsInput())
342
+
343
+ def resolve_mlflow_search_datasets(self, info, input):
344
+ input_dict = vars(input)
345
+ request_message = mlflow.protos.service_pb2.SearchDatasets()
346
+ parse_dict(input_dict, request_message)
347
+ return mlflow.server.handlers.search_datasets_impl(request_message)
348
+
349
+ def resolve_mlflow_search_runs(self, info, input):
350
+ input_dict = vars(input)
351
+ request_message = mlflow.protos.service_pb2.SearchRuns()
352
+ parse_dict(input_dict, request_message)
353
+ return mlflow.server.handlers.search_runs_impl(request_message)
@@ -0,0 +1,24 @@
1
+ import graphene
2
+ from graphql.language.ast import IntValueNode
3
+
4
+
5
+ class LongString(graphene.Scalar):
6
+ """
7
+ LongString Scalar type to prevent truncation to max integer in JavaScript.
8
+ """
9
+
10
+ description = "Long converted to string to prevent truncation to max integer in JavaScript"
11
+
12
+ @staticmethod
13
+ def serialize(long):
14
+ return str(long)
15
+
16
+ @staticmethod
17
+ def parse_literal(node):
18
+ if isinstance(node, IntValueNode):
19
+ return int(node.value)
20
+ return None
21
+
22
+ @staticmethod
23
+ def parse_value(value):
24
+ return int(value)
@@ -0,0 +1,15 @@
1
+ import graphene
2
+
3
+
4
+ class ErrorDetail(graphene.ObjectType):
5
+ # NOTE: This is not an exhaustive list, might need to add more things in the future if needed.
6
+ field = graphene.String()
7
+ message = graphene.String()
8
+
9
+
10
+ class ApiError(graphene.ObjectType):
11
+ code = graphene.String()
12
+ message = graphene.String()
13
+ help_url = graphene.String()
14
+ trace_id = graphene.String()
15
+ error_details = graphene.List(ErrorDetail)