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,4 @@
1
+ from mlflow.server.auth.cli import commands
2
+
3
+ if __name__ == "__main__":
4
+ commands()
@@ -0,0 +1,6 @@
1
+ [mlflow]
2
+ default_permission = READ
3
+ database_uri = sqlite:///basic_auth.db
4
+ admin_username = admin
5
+ admin_password = password1234
6
+ authorization_function = mlflow.server.auth:authenticate_request_basic_auth
@@ -0,0 +1,11 @@
1
+ import click
2
+
3
+ from mlflow.server.auth.db import cli as db_cli
4
+
5
+
6
+ @click.group()
7
+ def commands():
8
+ pass
9
+
10
+
11
+ commands.add_command(db_cli.commands)
@@ -0,0 +1,537 @@
1
+ from mlflow.server.auth.entities import ExperimentPermission, RegisteredModelPermission, User
2
+ from mlflow.server.auth.routes import (
3
+ CREATE_EXPERIMENT_PERMISSION,
4
+ CREATE_REGISTERED_MODEL_PERMISSION,
5
+ CREATE_USER,
6
+ DELETE_EXPERIMENT_PERMISSION,
7
+ DELETE_REGISTERED_MODEL_PERMISSION,
8
+ DELETE_USER,
9
+ GET_EXPERIMENT_PERMISSION,
10
+ GET_REGISTERED_MODEL_PERMISSION,
11
+ GET_USER,
12
+ UPDATE_EXPERIMENT_PERMISSION,
13
+ UPDATE_REGISTERED_MODEL_PERMISSION,
14
+ UPDATE_USER_ADMIN,
15
+ UPDATE_USER_PASSWORD,
16
+ )
17
+ from mlflow.utils.credentials import get_default_host_creds
18
+ from mlflow.utils.rest_utils import http_request_safe
19
+
20
+
21
+ class AuthServiceClient:
22
+ """
23
+ Client of an MLflow Tracking Server that enabled the default basic authentication plugin.
24
+ It is recommended to use :py:func:`mlflow.server.get_app_client()` to instantiate this class.
25
+ See https://mlflow.org/docs/latest/auth.html for more information.
26
+ """
27
+
28
+ def __init__(self, tracking_uri: str):
29
+ """
30
+ Args:
31
+ tracking_uri: Address of local or remote tracking server.
32
+ """
33
+ self.tracking_uri = tracking_uri
34
+
35
+ def _request(self, endpoint, method, **kwargs):
36
+ host_creds = get_default_host_creds(self.tracking_uri)
37
+ resp = http_request_safe(host_creds, endpoint, method, **kwargs)
38
+ return resp.json()
39
+
40
+ def create_user(self, username: str, password: str):
41
+ """
42
+ Create a new user.
43
+
44
+ Args:
45
+ username: The username.
46
+ password: The user's password. Must not be empty string.
47
+
48
+ Raises:
49
+ mlflow.exceptions.RestException: if the username is already taken.
50
+
51
+ Returns:
52
+ A single :py:class:`mlflow.server.auth.entities.User` object.
53
+
54
+ .. code-block:: python
55
+ :caption: Example
56
+
57
+ from mlflow.server.auth.client import AuthServiceClient
58
+
59
+ client = AuthServiceClient("tracking_uri")
60
+ user = client.create_user("newuser", "newpassword")
61
+ print(f"user_id: {user.id}")
62
+ print(f"username: {user.username}")
63
+ print(f"password_hash: {user.password_hash}")
64
+ print(f"is_admin: {user.is_admin}")
65
+
66
+ .. code-block:: text
67
+ :caption: Output
68
+
69
+ user_id: 3
70
+ username: newuser
71
+ password_hash: REDACTED
72
+ is_admin: False
73
+ """
74
+ resp = self._request(
75
+ CREATE_USER,
76
+ "POST",
77
+ json={"username": username, "password": password},
78
+ )
79
+ return User.from_json(resp["user"])
80
+
81
+ def get_user(self, username: str):
82
+ """
83
+ Get a user with a specific username.
84
+
85
+ Args:
86
+ username: The username.
87
+
88
+ Raises:
89
+ mlflow.exceptions.RestException: if the user does not exist
90
+
91
+ Returns:
92
+ A single :py:class:`mlflow.server.auth.entities.User` object.
93
+
94
+ .. code-block:: bash
95
+ :caption: Example
96
+
97
+ export MLFLOW_TRACKING_USERNAME=admin
98
+ export MLFLOW_TRACKING_PASSWORD=password
99
+
100
+ .. code-block:: python
101
+
102
+ from mlflow.server.auth.client import AuthServiceClient
103
+
104
+ client = AuthServiceClient("tracking_uri")
105
+ client.create_user("newuser", "newpassword")
106
+ user = client.get_user("newuser")
107
+
108
+ print(f"user_id: {user.id}")
109
+ print(f"username: {user.username}")
110
+ print(f"password_hash: {user.password_hash}")
111
+ print(f"is_admin: {user.is_admin}")
112
+
113
+ .. code-block:: text
114
+ :caption: Output
115
+
116
+ user_id: 3
117
+ username: newuser
118
+ password_hash: REDACTED
119
+ is_admin: False
120
+ """
121
+ resp = self._request(
122
+ GET_USER,
123
+ "GET",
124
+ params={"username": username},
125
+ )
126
+ return User.from_json(resp["user"])
127
+
128
+ def update_user_password(self, username: str, password: str):
129
+ """
130
+ Update the password of a specific user.
131
+
132
+ Args:
133
+ username: The username.
134
+ password: The new password.
135
+
136
+ Raises:
137
+ mlflow.exceptions.RestException: if the user does not exist
138
+
139
+ .. code-block:: bash
140
+ :caption: Example
141
+
142
+ export MLFLOW_TRACKING_USERNAME=admin
143
+ export MLFLOW_TRACKING_PASSWORD=password
144
+
145
+ .. code-block:: python
146
+
147
+ from mlflow.server.auth.client import AuthServiceClient
148
+
149
+ client = AuthServiceClient("tracking_uri")
150
+ client.create_user("newuser", "newpassword")
151
+
152
+ client.update_user_password("newuser", "anotherpassword")
153
+ """
154
+ self._request(
155
+ UPDATE_USER_PASSWORD,
156
+ "PATCH",
157
+ json={"username": username, "password": password},
158
+ )
159
+
160
+ def update_user_admin(self, username: str, is_admin: bool):
161
+ """
162
+ Update the admin status of a specific user.
163
+
164
+ Args:
165
+ username: The username.
166
+ is_admin: The new admin status.
167
+
168
+ Raises:
169
+ mlflow.exceptions.RestException: if the user does not exist
170
+
171
+ .. code-block:: bash
172
+ :caption: Example
173
+
174
+ export MLFLOW_TRACKING_USERNAME=admin
175
+ export MLFLOW_TRACKING_PASSWORD=password
176
+
177
+ .. code-block:: python
178
+
179
+ from mlflow.server.auth.client import AuthServiceClient
180
+
181
+ client = AuthServiceClient("tracking_uri")
182
+ client.create_user("newuser", "newpassword")
183
+
184
+ client.update_user_admin("newuser", True)
185
+ """
186
+ self._request(
187
+ UPDATE_USER_ADMIN,
188
+ "PATCH",
189
+ json={"username": username, "is_admin": is_admin},
190
+ )
191
+
192
+ def delete_user(self, username: str):
193
+ """
194
+ Delete a specific user.
195
+
196
+ Args:
197
+ username: The username.
198
+
199
+ Raises:
200
+ mlflow.exceptions.RestException: if the user does not exist
201
+
202
+ .. code-block:: bash
203
+ :caption: Example
204
+
205
+ export MLFLOW_TRACKING_USERNAME=admin
206
+ export MLFLOW_TRACKING_PASSWORD=password
207
+
208
+ .. code-block:: python
209
+
210
+ from mlflow.server.auth.client import AuthServiceClient
211
+
212
+ client = AuthServiceClient("tracking_uri")
213
+ client.create_user("newuser", "newpassword")
214
+
215
+ client.delete_user("newuser")
216
+ """
217
+ self._request(
218
+ DELETE_USER,
219
+ "DELETE",
220
+ json={"username": username},
221
+ )
222
+
223
+ def create_experiment_permission(self, experiment_id: str, username: str, permission: str):
224
+ """
225
+ Create a permission on an experiment for a user.
226
+
227
+ Args:
228
+ experiment_id: The id of the experiment.
229
+ username: The username.
230
+ permission: Permission to grant. Must be one of "READ", "EDIT", "MANAGE" and
231
+ "NO_PERMISSIONS".
232
+
233
+ Raises:
234
+ mlflow.exceptions.RestException: if the user does not exist, or a permission already
235
+ exists for this experiment user pair, or if the permission is invalid. Does not
236
+ require ``experiment_id`` to be an existing experiment.
237
+
238
+ Returns:
239
+ A single :py:class:`mlflow.server.auth.entities.ExperimentPermission` object.
240
+
241
+ .. code-block:: bash
242
+ :caption: Example
243
+
244
+ export MLFLOW_TRACKING_USERNAME=admin
245
+ export MLFLOW_TRACKING_PASSWORD=password
246
+
247
+ .. code-block:: python
248
+
249
+ from mlflow.server.auth.client import AuthServiceClient
250
+
251
+ client = AuthServiceClient("tracking_uri")
252
+ client.create_user("newuser", "newpassword")
253
+ ep = client.create_experiment_permission("myexperiment", "newuser", "READ")
254
+
255
+ print(f"experiment_id: {ep.experiment_id}")
256
+ print(f"user_id: {ep.user_id}")
257
+ print(f"permission: {ep.permission}")
258
+
259
+ .. code-block:: text
260
+ :caption: Output
261
+
262
+ experiment_id: myexperiment
263
+ user_id: 3
264
+ permission: READ
265
+ """
266
+ resp = self._request(
267
+ CREATE_EXPERIMENT_PERMISSION,
268
+ "POST",
269
+ json={"experiment_id": experiment_id, "username": username, "permission": permission},
270
+ )
271
+ return ExperimentPermission.from_json(resp["experiment_permission"])
272
+
273
+ def get_experiment_permission(self, experiment_id: str, username: str):
274
+ """
275
+ Get an experiment permission for a user.
276
+
277
+ Args:
278
+ experiment_id: The id of the experiment.
279
+ username: The username.
280
+
281
+ Raises:
282
+ mlflow.exceptions.RestException: if the user does not exist,
283
+ or no permission exists for this experiment user pair.
284
+ Note that the default permission will still be effective even if
285
+ no permission exists.
286
+
287
+ Returns:
288
+ A single :py:class:`mlflow.server.auth.entities.ExperimentPermission` object.
289
+
290
+ .. code-block:: bash
291
+ :caption: Example
292
+
293
+ export MLFLOW_TRACKING_USERNAME=admin
294
+ export MLFLOW_TRACKING_PASSWORD=password
295
+
296
+ .. code-block:: python
297
+
298
+ from mlflow.server.auth.client import AuthServiceClient
299
+
300
+ client = AuthServiceClient("tracking_uri")
301
+ client.create_user("newuser", "newpassword")
302
+ client.create_experiment_permission("myexperiment", "newuser", "READ")
303
+ ep = client.get_experiment_permission("myexperiment", "newuser")
304
+ print(f"experiment_id: {ep.experiment_id}")
305
+ print(f"user_id: {ep.user_id}")
306
+ print(f"permission: {ep.permission}")
307
+
308
+ .. code-block:: text
309
+ :caption: Output
310
+
311
+ experiment_id: myexperiment
312
+ user_id: 3
313
+ permission: READ
314
+ """
315
+ resp = self._request(
316
+ GET_EXPERIMENT_PERMISSION,
317
+ "GET",
318
+ params={"experiment_id": experiment_id, "username": username},
319
+ )
320
+ return ExperimentPermission.from_json(resp["experiment_permission"])
321
+
322
+ def update_experiment_permission(self, experiment_id: str, username: str, permission: str):
323
+ """
324
+ Update an existing experiment permission for a user.
325
+
326
+ Args:
327
+ experiment_id: The id of the experiment.
328
+ username: The username.
329
+ permission: New permission to grant. Must be one of "READ", "EDIT", "MANAGE" and
330
+ "NO_PERMISSIONS".
331
+
332
+ Raises:
333
+ mlflow.exceptions.RestException: if the user does not exist, or no permission exists for
334
+ this experiment user pair, or if the permission is invalid
335
+
336
+ .. code-block:: bash
337
+ :caption: Example
338
+
339
+ export MLFLOW_TRACKING_USERNAME=admin
340
+ export MLFLOW_TRACKING_PASSWORD=password
341
+
342
+ .. code-block:: python
343
+
344
+ from mlflow.server.auth.client import AuthServiceClient
345
+
346
+ client = AuthServiceClient("tracking_uri")
347
+ client.create_user("newuser", "newpassword")
348
+ client.create_experiment_permission("myexperiment", "newuser", "READ")
349
+ client.update_experiment_permission("myexperiment", "newuser", "EDIT")
350
+ """
351
+ self._request(
352
+ UPDATE_EXPERIMENT_PERMISSION,
353
+ "PATCH",
354
+ json={"experiment_id": experiment_id, "username": username, "permission": permission},
355
+ )
356
+
357
+ def delete_experiment_permission(self, experiment_id: str, username: str):
358
+ """
359
+ Delete an existing experiment permission for a user.
360
+
361
+ Args:
362
+ experiment_id: The id of the experiment.
363
+ username: The username.
364
+
365
+ Raises:
366
+ mlflow.exceptions.RestException: if the user does not exist, or no permission exists for
367
+ this experiment user pair, or if the permission is invalid.
368
+ Note that the default permission will still be effective even
369
+ after the permission has been deleted.
370
+
371
+
372
+ .. code-block:: bash
373
+ :caption: Example
374
+
375
+ export MLFLOW_TRACKING_USERNAME=admin
376
+ export MLFLOW_TRACKING_PASSWORD=password
377
+
378
+ .. code-block:: python
379
+
380
+ from mlflow.server.auth.client import AuthServiceClient
381
+
382
+ client = AuthServiceClient("tracking_uri")
383
+ client.create_user("newuser", "newpassword")
384
+ client.create_experiment_permission("myexperiment", "newuser", "READ")
385
+ client.delete_experiment_permission("myexperiment", "newuser")
386
+ """
387
+ self._request(
388
+ DELETE_EXPERIMENT_PERMISSION,
389
+ "DELETE",
390
+ json={"experiment_id": experiment_id, "username": username},
391
+ )
392
+
393
+ def create_registered_model_permission(self, name: str, username: str, permission: str):
394
+ """
395
+ Create a permission on an registered model for a user.
396
+
397
+ Args:
398
+ name: The name of the registered model.
399
+ username: The username.
400
+ permission: Permission to grant. Must be one of "READ", "EDIT", "MANAGE" and
401
+ "NO_PERMISSIONS".
402
+
403
+ Raises:
404
+ mlflow.exceptions.RestException: if the user does not exist,
405
+ or a permission already exists for this registered model user pair,
406
+ or if the permission is invalid.
407
+ Does not require ``name`` to be an existing registered model.
408
+
409
+ Returns:
410
+ A single :py:class:`mlflow.server.auth.entities.RegisteredModelPermission` object.
411
+ """
412
+ resp = self._request(
413
+ CREATE_REGISTERED_MODEL_PERMISSION,
414
+ "POST",
415
+ json={"name": name, "username": username, "permission": permission},
416
+ )
417
+ return RegisteredModelPermission.from_json(resp["registered_model_permission"])
418
+
419
+ def get_registered_model_permission(self, name: str, username: str):
420
+ """
421
+ Get an registered model permission for a user.
422
+
423
+ Args:
424
+ name: The name of the registered model.
425
+ username: The username.
426
+
427
+ Raises:
428
+ mlflow.exceptions.RestException: if the user does not
429
+ exist, or no permission exists for this registered model user pair. Note that the
430
+ default permission will still be effective even if no permission exists.
431
+
432
+ Returns:
433
+ A single :py:class:`mlflow.server.auth.entities.RegisteredModelPermission` object.
434
+
435
+ .. code-block:: bash
436
+ :caption: Example
437
+
438
+ export MLFLOW_TRACKING_USERNAME=admin
439
+ export MLFLOW_TRACKING_PASSWORD=password
440
+
441
+ .. code-block:: python
442
+
443
+ from mlflow.server.auth.client import AuthServiceClient
444
+
445
+ client = AuthServiceClient("tracking_uri")
446
+ client.create_user("newuser", "newpassword")
447
+ client.create_registered_model_permission("myregisteredmodel", "newuser", "READ")
448
+ rmp = client.get_registered_model_permission("myregisteredmodel", "newuser")
449
+
450
+ print(f"name: {rmp.name}")
451
+ print(f"user_id: {rmp.user_id}")
452
+ print(f"permission: {rmp.permission}")
453
+
454
+ .. code-block:: text
455
+ :caption: Output
456
+
457
+ name: myregisteredmodel
458
+ user_id: 3
459
+ permission: READ
460
+ """
461
+ resp = self._request(
462
+ GET_REGISTERED_MODEL_PERMISSION,
463
+ "GET",
464
+ params={"name": name, "username": username},
465
+ )
466
+ return RegisteredModelPermission.from_json(resp["registered_model_permission"])
467
+
468
+ def update_registered_model_permission(self, name: str, username: str, permission: str):
469
+ """
470
+ Update an existing registered model permission for a user.
471
+
472
+ Args:
473
+ name: The name of the registered model.
474
+ username: The username.
475
+ permission: New permission to grant. Must be one of "READ", "EDIT", "MANAGE" and
476
+ "NO_PERMISSIONS".
477
+
478
+ Raises:
479
+ mlflow.exceptions.RestException: if the user does not exist, or no permission exists for
480
+ this registered model user pair, or if the permission is invalid.
481
+
482
+ .. code-block:: bash
483
+ :caption: Example
484
+
485
+ export MLFLOW_TRACKING_USERNAME=admin
486
+ export MLFLOW_TRACKING_PASSWORD=password
487
+
488
+ .. code-block:: python
489
+
490
+ from mlflow.server.auth.client import AuthServiceClient
491
+
492
+ client = AuthServiceClient("tracking_uri")
493
+ client.create_user("newuser", "newpassword")
494
+ client.create_registered_model_permission("myregisteredmodel", "newuser", "READ")
495
+ client.update_registered_model_permission("myregisteredmodel", "newuser", "EDIT")
496
+ """
497
+ self._request(
498
+ UPDATE_REGISTERED_MODEL_PERMISSION,
499
+ "PATCH",
500
+ json={"name": name, "username": username, "permission": permission},
501
+ )
502
+
503
+ def delete_registered_model_permission(self, name: str, username: str):
504
+ """
505
+ Delete an existing registered model permission for a user.
506
+
507
+ Args:
508
+ name: The name of the registered model.
509
+ username: The username.
510
+
511
+ Raises:
512
+ mlflow.exceptions.RestException: if the user does not exist,
513
+ or no permission exists for this registered model user pair,
514
+ or if the permission is invalid.
515
+ Note that the default permission will still be effective even
516
+ after the permission has been deleted.
517
+
518
+ .. code-block:: bash
519
+ :caption: Example
520
+
521
+ export MLFLOW_TRACKING_USERNAME=admin
522
+ export MLFLOW_TRACKING_PASSWORD=password
523
+
524
+ .. code-block:: python
525
+
526
+ from mlflow.server.auth.client import AuthServiceClient
527
+
528
+ client = AuthServiceClient("tracking_uri")
529
+ client.create_user("newuser", "newpassword")
530
+ client.create_registered_model_permission("myregisteredmodel", "newuser", "READ")
531
+ client.delete_registered_model_permission("myregisteredmodel", "newuser")
532
+ """
533
+ self._request(
534
+ DELETE_REGISTERED_MODEL_PERMISSION,
535
+ "DELETE",
536
+ json={"name": name, "username": username},
537
+ )
@@ -0,0 +1,34 @@
1
+ import configparser
2
+ from pathlib import Path
3
+ from typing import NamedTuple
4
+
5
+ from mlflow.environment_variables import MLFLOW_AUTH_CONFIG_PATH
6
+
7
+
8
+ class AuthConfig(NamedTuple):
9
+ default_permission: str
10
+ database_uri: str
11
+ admin_username: str
12
+ admin_password: str
13
+ authorization_function: str
14
+
15
+
16
+ def _get_auth_config_path() -> str:
17
+ return (
18
+ MLFLOW_AUTH_CONFIG_PATH.get() or Path(__file__).parent.joinpath("basic_auth.ini").resolve()
19
+ )
20
+
21
+
22
+ def read_auth_config() -> AuthConfig:
23
+ config_path = _get_auth_config_path()
24
+ config = configparser.ConfigParser()
25
+ config.read(config_path)
26
+ return AuthConfig(
27
+ default_permission=config["mlflow"]["default_permission"],
28
+ database_uri=config["mlflow"]["database_uri"],
29
+ admin_username=config["mlflow"]["admin_username"],
30
+ admin_password=config["mlflow"]["admin_password"],
31
+ authorization_function=config["mlflow"].get(
32
+ "authorization_function", "mlflow.server.auth:authenticate_request_basic_auth"
33
+ ),
34
+ )
File without changes
@@ -0,0 +1,18 @@
1
+ import click
2
+ import sqlalchemy
3
+
4
+ from mlflow.server.auth.db import utils
5
+
6
+
7
+ @click.group(name="db")
8
+ def commands():
9
+ pass
10
+
11
+
12
+ @commands.command()
13
+ @click.option("--url", required=True)
14
+ @click.option("--revision", default="head")
15
+ def upgrade(url: str, revision: str) -> None:
16
+ engine = sqlalchemy.create_engine(url)
17
+ utils.migrate(engine, revision)
18
+ engine.dispose()
File without changes