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.
- genesis_flow-1.0.0.dist-info/METADATA +822 -0
- genesis_flow-1.0.0.dist-info/RECORD +645 -0
- genesis_flow-1.0.0.dist-info/WHEEL +5 -0
- genesis_flow-1.0.0.dist-info/entry_points.txt +19 -0
- genesis_flow-1.0.0.dist-info/licenses/LICENSE.txt +202 -0
- genesis_flow-1.0.0.dist-info/top_level.txt +1 -0
- mlflow/__init__.py +367 -0
- mlflow/__main__.py +3 -0
- mlflow/ag2/__init__.py +56 -0
- mlflow/ag2/ag2_logger.py +294 -0
- mlflow/anthropic/__init__.py +40 -0
- mlflow/anthropic/autolog.py +129 -0
- mlflow/anthropic/chat.py +144 -0
- mlflow/artifacts/__init__.py +268 -0
- mlflow/autogen/__init__.py +144 -0
- mlflow/autogen/chat.py +142 -0
- mlflow/azure/__init__.py +26 -0
- mlflow/azure/auth_handler.py +257 -0
- mlflow/azure/client.py +319 -0
- mlflow/azure/config.py +120 -0
- mlflow/azure/connection_factory.py +340 -0
- mlflow/azure/exceptions.py +27 -0
- mlflow/azure/stores.py +327 -0
- mlflow/azure/utils.py +183 -0
- mlflow/bedrock/__init__.py +45 -0
- mlflow/bedrock/_autolog.py +202 -0
- mlflow/bedrock/chat.py +122 -0
- mlflow/bedrock/stream.py +160 -0
- mlflow/bedrock/utils.py +43 -0
- mlflow/cli.py +707 -0
- mlflow/client.py +12 -0
- mlflow/config/__init__.py +56 -0
- mlflow/crewai/__init__.py +79 -0
- mlflow/crewai/autolog.py +253 -0
- mlflow/crewai/chat.py +29 -0
- mlflow/data/__init__.py +75 -0
- mlflow/data/artifact_dataset_sources.py +170 -0
- mlflow/data/code_dataset_source.py +40 -0
- mlflow/data/dataset.py +123 -0
- mlflow/data/dataset_registry.py +168 -0
- mlflow/data/dataset_source.py +110 -0
- mlflow/data/dataset_source_registry.py +219 -0
- mlflow/data/delta_dataset_source.py +167 -0
- mlflow/data/digest_utils.py +108 -0
- mlflow/data/evaluation_dataset.py +562 -0
- mlflow/data/filesystem_dataset_source.py +81 -0
- mlflow/data/http_dataset_source.py +145 -0
- mlflow/data/huggingface_dataset.py +258 -0
- mlflow/data/huggingface_dataset_source.py +118 -0
- mlflow/data/meta_dataset.py +104 -0
- mlflow/data/numpy_dataset.py +223 -0
- mlflow/data/pandas_dataset.py +231 -0
- mlflow/data/polars_dataset.py +352 -0
- mlflow/data/pyfunc_dataset_mixin.py +31 -0
- mlflow/data/schema.py +76 -0
- mlflow/data/sources.py +1 -0
- mlflow/data/spark_dataset.py +406 -0
- mlflow/data/spark_dataset_source.py +74 -0
- mlflow/data/spark_delta_utils.py +118 -0
- mlflow/data/tensorflow_dataset.py +350 -0
- mlflow/data/uc_volume_dataset_source.py +81 -0
- mlflow/db.py +27 -0
- mlflow/dspy/__init__.py +17 -0
- mlflow/dspy/autolog.py +197 -0
- mlflow/dspy/callback.py +398 -0
- mlflow/dspy/constant.py +1 -0
- mlflow/dspy/load.py +93 -0
- mlflow/dspy/save.py +393 -0
- mlflow/dspy/util.py +109 -0
- mlflow/dspy/wrapper.py +226 -0
- mlflow/entities/__init__.py +104 -0
- mlflow/entities/_mlflow_object.py +52 -0
- mlflow/entities/assessment.py +545 -0
- mlflow/entities/assessment_error.py +80 -0
- mlflow/entities/assessment_source.py +141 -0
- mlflow/entities/dataset.py +92 -0
- mlflow/entities/dataset_input.py +51 -0
- mlflow/entities/dataset_summary.py +62 -0
- mlflow/entities/document.py +48 -0
- mlflow/entities/experiment.py +109 -0
- mlflow/entities/experiment_tag.py +35 -0
- mlflow/entities/file_info.py +45 -0
- mlflow/entities/input_tag.py +35 -0
- mlflow/entities/lifecycle_stage.py +35 -0
- mlflow/entities/logged_model.py +228 -0
- mlflow/entities/logged_model_input.py +26 -0
- mlflow/entities/logged_model_output.py +32 -0
- mlflow/entities/logged_model_parameter.py +46 -0
- mlflow/entities/logged_model_status.py +74 -0
- mlflow/entities/logged_model_tag.py +33 -0
- mlflow/entities/metric.py +200 -0
- mlflow/entities/model_registry/__init__.py +29 -0
- mlflow/entities/model_registry/_model_registry_entity.py +13 -0
- mlflow/entities/model_registry/model_version.py +243 -0
- mlflow/entities/model_registry/model_version_deployment_job_run_state.py +44 -0
- mlflow/entities/model_registry/model_version_deployment_job_state.py +70 -0
- mlflow/entities/model_registry/model_version_search.py +25 -0
- mlflow/entities/model_registry/model_version_stages.py +25 -0
- mlflow/entities/model_registry/model_version_status.py +35 -0
- mlflow/entities/model_registry/model_version_tag.py +35 -0
- mlflow/entities/model_registry/prompt.py +73 -0
- mlflow/entities/model_registry/prompt_version.py +244 -0
- mlflow/entities/model_registry/registered_model.py +175 -0
- mlflow/entities/model_registry/registered_model_alias.py +35 -0
- mlflow/entities/model_registry/registered_model_deployment_job_state.py +39 -0
- mlflow/entities/model_registry/registered_model_search.py +25 -0
- mlflow/entities/model_registry/registered_model_tag.py +35 -0
- mlflow/entities/multipart_upload.py +74 -0
- mlflow/entities/param.py +49 -0
- mlflow/entities/run.py +97 -0
- mlflow/entities/run_data.py +84 -0
- mlflow/entities/run_info.py +188 -0
- mlflow/entities/run_inputs.py +59 -0
- mlflow/entities/run_outputs.py +43 -0
- mlflow/entities/run_status.py +41 -0
- mlflow/entities/run_tag.py +36 -0
- mlflow/entities/source_type.py +31 -0
- mlflow/entities/span.py +774 -0
- mlflow/entities/span_event.py +96 -0
- mlflow/entities/span_status.py +102 -0
- mlflow/entities/trace.py +317 -0
- mlflow/entities/trace_data.py +71 -0
- mlflow/entities/trace_info.py +220 -0
- mlflow/entities/trace_info_v2.py +162 -0
- mlflow/entities/trace_location.py +173 -0
- mlflow/entities/trace_state.py +39 -0
- mlflow/entities/trace_status.py +68 -0
- mlflow/entities/view_type.py +51 -0
- mlflow/environment_variables.py +866 -0
- mlflow/evaluation/__init__.py +16 -0
- mlflow/evaluation/assessment.py +369 -0
- mlflow/evaluation/evaluation.py +411 -0
- mlflow/evaluation/evaluation_tag.py +61 -0
- mlflow/evaluation/fluent.py +48 -0
- mlflow/evaluation/utils.py +201 -0
- mlflow/exceptions.py +213 -0
- mlflow/experiments.py +140 -0
- mlflow/gemini/__init__.py +81 -0
- mlflow/gemini/autolog.py +186 -0
- mlflow/gemini/chat.py +261 -0
- mlflow/genai/__init__.py +71 -0
- mlflow/genai/datasets/__init__.py +67 -0
- mlflow/genai/datasets/evaluation_dataset.py +131 -0
- mlflow/genai/evaluation/__init__.py +3 -0
- mlflow/genai/evaluation/base.py +411 -0
- mlflow/genai/evaluation/constant.py +23 -0
- mlflow/genai/evaluation/utils.py +244 -0
- mlflow/genai/judges/__init__.py +21 -0
- mlflow/genai/judges/databricks.py +404 -0
- mlflow/genai/label_schemas/__init__.py +153 -0
- mlflow/genai/label_schemas/label_schemas.py +209 -0
- mlflow/genai/labeling/__init__.py +159 -0
- mlflow/genai/labeling/labeling.py +250 -0
- mlflow/genai/optimize/__init__.py +13 -0
- mlflow/genai/optimize/base.py +198 -0
- mlflow/genai/optimize/optimizers/__init__.py +4 -0
- mlflow/genai/optimize/optimizers/base_optimizer.py +38 -0
- mlflow/genai/optimize/optimizers/dspy_mipro_optimizer.py +221 -0
- mlflow/genai/optimize/optimizers/dspy_optimizer.py +91 -0
- mlflow/genai/optimize/optimizers/utils/dspy_mipro_callback.py +76 -0
- mlflow/genai/optimize/optimizers/utils/dspy_mipro_utils.py +18 -0
- mlflow/genai/optimize/types.py +75 -0
- mlflow/genai/optimize/util.py +30 -0
- mlflow/genai/prompts/__init__.py +206 -0
- mlflow/genai/scheduled_scorers.py +431 -0
- mlflow/genai/scorers/__init__.py +26 -0
- mlflow/genai/scorers/base.py +492 -0
- mlflow/genai/scorers/builtin_scorers.py +765 -0
- mlflow/genai/scorers/scorer_utils.py +138 -0
- mlflow/genai/scorers/validation.py +165 -0
- mlflow/genai/utils/data_validation.py +146 -0
- mlflow/genai/utils/enum_utils.py +23 -0
- mlflow/genai/utils/trace_utils.py +211 -0
- mlflow/groq/__init__.py +42 -0
- mlflow/groq/_groq_autolog.py +74 -0
- mlflow/johnsnowlabs/__init__.py +888 -0
- mlflow/langchain/__init__.py +24 -0
- mlflow/langchain/api_request_parallel_processor.py +330 -0
- mlflow/langchain/autolog.py +147 -0
- mlflow/langchain/chat_agent_langgraph.py +340 -0
- mlflow/langchain/constant.py +1 -0
- mlflow/langchain/constants.py +1 -0
- mlflow/langchain/databricks_dependencies.py +444 -0
- mlflow/langchain/langchain_tracer.py +597 -0
- mlflow/langchain/model.py +919 -0
- mlflow/langchain/output_parsers.py +142 -0
- mlflow/langchain/retriever_chain.py +153 -0
- mlflow/langchain/runnables.py +527 -0
- mlflow/langchain/utils/chat.py +402 -0
- mlflow/langchain/utils/logging.py +671 -0
- mlflow/langchain/utils/serialization.py +36 -0
- mlflow/legacy_databricks_cli/__init__.py +0 -0
- mlflow/legacy_databricks_cli/configure/__init__.py +0 -0
- mlflow/legacy_databricks_cli/configure/provider.py +482 -0
- mlflow/litellm/__init__.py +175 -0
- mlflow/llama_index/__init__.py +22 -0
- mlflow/llama_index/autolog.py +55 -0
- mlflow/llama_index/chat.py +43 -0
- mlflow/llama_index/constant.py +1 -0
- mlflow/llama_index/model.py +577 -0
- mlflow/llama_index/pyfunc_wrapper.py +332 -0
- mlflow/llama_index/serialize_objects.py +188 -0
- mlflow/llama_index/tracer.py +561 -0
- mlflow/metrics/__init__.py +479 -0
- mlflow/metrics/base.py +39 -0
- mlflow/metrics/genai/__init__.py +25 -0
- mlflow/metrics/genai/base.py +101 -0
- mlflow/metrics/genai/genai_metric.py +771 -0
- mlflow/metrics/genai/metric_definitions.py +450 -0
- mlflow/metrics/genai/model_utils.py +371 -0
- mlflow/metrics/genai/prompt_template.py +68 -0
- mlflow/metrics/genai/prompts/__init__.py +0 -0
- mlflow/metrics/genai/prompts/v1.py +422 -0
- mlflow/metrics/genai/utils.py +6 -0
- mlflow/metrics/metric_definitions.py +619 -0
- mlflow/mismatch.py +34 -0
- mlflow/mistral/__init__.py +34 -0
- mlflow/mistral/autolog.py +71 -0
- mlflow/mistral/chat.py +135 -0
- mlflow/ml_package_versions.py +452 -0
- mlflow/models/__init__.py +97 -0
- mlflow/models/auth_policy.py +83 -0
- mlflow/models/cli.py +354 -0
- mlflow/models/container/__init__.py +294 -0
- mlflow/models/container/scoring_server/__init__.py +0 -0
- mlflow/models/container/scoring_server/nginx.conf +39 -0
- mlflow/models/dependencies_schemas.py +287 -0
- mlflow/models/display_utils.py +158 -0
- mlflow/models/docker_utils.py +211 -0
- mlflow/models/evaluation/__init__.py +23 -0
- mlflow/models/evaluation/_shap_patch.py +64 -0
- mlflow/models/evaluation/artifacts.py +194 -0
- mlflow/models/evaluation/base.py +1811 -0
- mlflow/models/evaluation/calibration_curve.py +109 -0
- mlflow/models/evaluation/default_evaluator.py +996 -0
- mlflow/models/evaluation/deprecated.py +23 -0
- mlflow/models/evaluation/evaluator_registry.py +80 -0
- mlflow/models/evaluation/evaluators/classifier.py +704 -0
- mlflow/models/evaluation/evaluators/default.py +233 -0
- mlflow/models/evaluation/evaluators/regressor.py +96 -0
- mlflow/models/evaluation/evaluators/shap.py +296 -0
- mlflow/models/evaluation/lift_curve.py +178 -0
- mlflow/models/evaluation/utils/metric.py +123 -0
- mlflow/models/evaluation/utils/trace.py +179 -0
- mlflow/models/evaluation/validation.py +434 -0
- mlflow/models/flavor_backend.py +93 -0
- mlflow/models/flavor_backend_registry.py +53 -0
- mlflow/models/model.py +1639 -0
- mlflow/models/model_config.py +150 -0
- mlflow/models/notebook_resources/agent_evaluation_template.html +235 -0
- mlflow/models/notebook_resources/eval_with_dataset_example.py +22 -0
- mlflow/models/notebook_resources/eval_with_synthetic_example.py +22 -0
- mlflow/models/python_api.py +369 -0
- mlflow/models/rag_signatures.py +128 -0
- mlflow/models/resources.py +321 -0
- mlflow/models/signature.py +662 -0
- mlflow/models/utils.py +2054 -0
- mlflow/models/wheeled_model.py +280 -0
- mlflow/openai/__init__.py +57 -0
- mlflow/openai/_agent_tracer.py +364 -0
- mlflow/openai/api_request_parallel_processor.py +131 -0
- mlflow/openai/autolog.py +509 -0
- mlflow/openai/constant.py +1 -0
- mlflow/openai/model.py +824 -0
- mlflow/openai/utils/chat_schema.py +367 -0
- mlflow/optuna/__init__.py +3 -0
- mlflow/optuna/storage.py +646 -0
- mlflow/plugins/__init__.py +72 -0
- mlflow/plugins/base.py +358 -0
- mlflow/plugins/builtin/__init__.py +24 -0
- mlflow/plugins/builtin/pytorch_plugin.py +150 -0
- mlflow/plugins/builtin/sklearn_plugin.py +158 -0
- mlflow/plugins/builtin/transformers_plugin.py +187 -0
- mlflow/plugins/cli.py +321 -0
- mlflow/plugins/discovery.py +340 -0
- mlflow/plugins/manager.py +465 -0
- mlflow/plugins/registry.py +316 -0
- mlflow/plugins/templates/framework_plugin_template.py +329 -0
- mlflow/prompt/constants.py +20 -0
- mlflow/prompt/promptlab_model.py +197 -0
- mlflow/prompt/registry_utils.py +248 -0
- mlflow/promptflow/__init__.py +495 -0
- mlflow/protos/__init__.py +0 -0
- mlflow/protos/assessments_pb2.py +174 -0
- mlflow/protos/databricks_artifacts_pb2.py +489 -0
- mlflow/protos/databricks_filesystem_service_pb2.py +196 -0
- mlflow/protos/databricks_managed_catalog_messages_pb2.py +95 -0
- mlflow/protos/databricks_managed_catalog_service_pb2.py +86 -0
- mlflow/protos/databricks_pb2.py +267 -0
- mlflow/protos/databricks_trace_server_pb2.py +374 -0
- mlflow/protos/databricks_uc_registry_messages_pb2.py +1249 -0
- mlflow/protos/databricks_uc_registry_service_pb2.py +170 -0
- mlflow/protos/facet_feature_statistics_pb2.py +296 -0
- mlflow/protos/internal_pb2.py +77 -0
- mlflow/protos/mlflow_artifacts_pb2.py +336 -0
- mlflow/protos/model_registry_pb2.py +1073 -0
- mlflow/protos/scalapb/__init__.py +0 -0
- mlflow/protos/scalapb/scalapb_pb2.py +104 -0
- mlflow/protos/service_pb2.py +2600 -0
- mlflow/protos/unity_catalog_oss_messages_pb2.py +457 -0
- mlflow/protos/unity_catalog_oss_service_pb2.py +130 -0
- mlflow/protos/unity_catalog_prompt_messages_pb2.py +447 -0
- mlflow/protos/unity_catalog_prompt_messages_pb2_grpc.py +24 -0
- mlflow/protos/unity_catalog_prompt_service_pb2.py +164 -0
- mlflow/protos/unity_catalog_prompt_service_pb2_grpc.py +785 -0
- mlflow/py.typed +0 -0
- mlflow/pydantic_ai/__init__.py +57 -0
- mlflow/pydantic_ai/autolog.py +173 -0
- mlflow/pyfunc/__init__.py +3844 -0
- mlflow/pyfunc/_mlflow_pyfunc_backend_predict.py +61 -0
- mlflow/pyfunc/backend.py +523 -0
- mlflow/pyfunc/context.py +78 -0
- mlflow/pyfunc/dbconnect_artifact_cache.py +144 -0
- mlflow/pyfunc/loaders/__init__.py +7 -0
- mlflow/pyfunc/loaders/chat_agent.py +117 -0
- mlflow/pyfunc/loaders/chat_model.py +125 -0
- mlflow/pyfunc/loaders/code_model.py +31 -0
- mlflow/pyfunc/loaders/responses_agent.py +112 -0
- mlflow/pyfunc/mlserver.py +46 -0
- mlflow/pyfunc/model.py +1473 -0
- mlflow/pyfunc/scoring_server/__init__.py +604 -0
- mlflow/pyfunc/scoring_server/app.py +7 -0
- mlflow/pyfunc/scoring_server/client.py +146 -0
- mlflow/pyfunc/spark_model_cache.py +48 -0
- mlflow/pyfunc/stdin_server.py +44 -0
- mlflow/pyfunc/utils/__init__.py +3 -0
- mlflow/pyfunc/utils/data_validation.py +224 -0
- mlflow/pyfunc/utils/environment.py +22 -0
- mlflow/pyfunc/utils/input_converter.py +47 -0
- mlflow/pyfunc/utils/serving_data_parser.py +11 -0
- mlflow/pytorch/__init__.py +1171 -0
- mlflow/pytorch/_lightning_autolog.py +580 -0
- mlflow/pytorch/_pytorch_autolog.py +50 -0
- mlflow/pytorch/pickle_module.py +35 -0
- mlflow/rfunc/__init__.py +42 -0
- mlflow/rfunc/backend.py +134 -0
- mlflow/runs.py +89 -0
- mlflow/server/__init__.py +302 -0
- mlflow/server/auth/__init__.py +1224 -0
- mlflow/server/auth/__main__.py +4 -0
- mlflow/server/auth/basic_auth.ini +6 -0
- mlflow/server/auth/cli.py +11 -0
- mlflow/server/auth/client.py +537 -0
- mlflow/server/auth/config.py +34 -0
- mlflow/server/auth/db/__init__.py +0 -0
- mlflow/server/auth/db/cli.py +18 -0
- mlflow/server/auth/db/migrations/__init__.py +0 -0
- mlflow/server/auth/db/migrations/alembic.ini +110 -0
- mlflow/server/auth/db/migrations/env.py +76 -0
- mlflow/server/auth/db/migrations/versions/8606fa83a998_initial_migration.py +51 -0
- mlflow/server/auth/db/migrations/versions/__init__.py +0 -0
- mlflow/server/auth/db/models.py +67 -0
- mlflow/server/auth/db/utils.py +37 -0
- mlflow/server/auth/entities.py +165 -0
- mlflow/server/auth/logo.py +14 -0
- mlflow/server/auth/permissions.py +65 -0
- mlflow/server/auth/routes.py +18 -0
- mlflow/server/auth/sqlalchemy_store.py +263 -0
- mlflow/server/graphql/__init__.py +0 -0
- mlflow/server/graphql/autogenerated_graphql_schema.py +353 -0
- mlflow/server/graphql/graphql_custom_scalars.py +24 -0
- mlflow/server/graphql/graphql_errors.py +15 -0
- mlflow/server/graphql/graphql_no_batching.py +89 -0
- mlflow/server/graphql/graphql_schema_extensions.py +74 -0
- mlflow/server/handlers.py +3217 -0
- mlflow/server/prometheus_exporter.py +17 -0
- mlflow/server/validation.py +30 -0
- mlflow/shap/__init__.py +691 -0
- mlflow/sklearn/__init__.py +1994 -0
- mlflow/sklearn/utils.py +1041 -0
- mlflow/smolagents/__init__.py +66 -0
- mlflow/smolagents/autolog.py +139 -0
- mlflow/smolagents/chat.py +29 -0
- mlflow/store/__init__.py +10 -0
- mlflow/store/_unity_catalog/__init__.py +1 -0
- mlflow/store/_unity_catalog/lineage/__init__.py +1 -0
- mlflow/store/_unity_catalog/lineage/constants.py +2 -0
- mlflow/store/_unity_catalog/registry/__init__.py +6 -0
- mlflow/store/_unity_catalog/registry/prompt_info.py +75 -0
- mlflow/store/_unity_catalog/registry/rest_store.py +1740 -0
- mlflow/store/_unity_catalog/registry/uc_oss_rest_store.py +507 -0
- mlflow/store/_unity_catalog/registry/utils.py +121 -0
- mlflow/store/artifact/__init__.py +0 -0
- mlflow/store/artifact/artifact_repo.py +472 -0
- mlflow/store/artifact/artifact_repository_registry.py +154 -0
- mlflow/store/artifact/azure_blob_artifact_repo.py +275 -0
- mlflow/store/artifact/azure_data_lake_artifact_repo.py +295 -0
- mlflow/store/artifact/cli.py +141 -0
- mlflow/store/artifact/cloud_artifact_repo.py +332 -0
- mlflow/store/artifact/databricks_artifact_repo.py +729 -0
- mlflow/store/artifact/databricks_artifact_repo_resources.py +301 -0
- mlflow/store/artifact/databricks_logged_model_artifact_repo.py +93 -0
- mlflow/store/artifact/databricks_models_artifact_repo.py +216 -0
- mlflow/store/artifact/databricks_sdk_artifact_repo.py +134 -0
- mlflow/store/artifact/databricks_sdk_models_artifact_repo.py +97 -0
- mlflow/store/artifact/dbfs_artifact_repo.py +240 -0
- mlflow/store/artifact/ftp_artifact_repo.py +132 -0
- mlflow/store/artifact/gcs_artifact_repo.py +296 -0
- mlflow/store/artifact/hdfs_artifact_repo.py +209 -0
- mlflow/store/artifact/http_artifact_repo.py +218 -0
- mlflow/store/artifact/local_artifact_repo.py +142 -0
- mlflow/store/artifact/mlflow_artifacts_repo.py +94 -0
- mlflow/store/artifact/models_artifact_repo.py +259 -0
- mlflow/store/artifact/optimized_s3_artifact_repo.py +356 -0
- mlflow/store/artifact/presigned_url_artifact_repo.py +173 -0
- mlflow/store/artifact/r2_artifact_repo.py +70 -0
- mlflow/store/artifact/runs_artifact_repo.py +265 -0
- mlflow/store/artifact/s3_artifact_repo.py +330 -0
- mlflow/store/artifact/sftp_artifact_repo.py +141 -0
- mlflow/store/artifact/uc_volume_artifact_repo.py +76 -0
- mlflow/store/artifact/unity_catalog_models_artifact_repo.py +168 -0
- mlflow/store/artifact/unity_catalog_oss_models_artifact_repo.py +168 -0
- mlflow/store/artifact/utils/__init__.py +0 -0
- mlflow/store/artifact/utils/models.py +148 -0
- mlflow/store/db/__init__.py +0 -0
- mlflow/store/db/base_sql_model.py +3 -0
- mlflow/store/db/db_types.py +10 -0
- mlflow/store/db/utils.py +314 -0
- mlflow/store/db_migrations/__init__.py +0 -0
- mlflow/store/db_migrations/alembic.ini +74 -0
- mlflow/store/db_migrations/env.py +84 -0
- mlflow/store/db_migrations/versions/0584bdc529eb_add_cascading_deletion_to_datasets_from_experiments.py +88 -0
- mlflow/store/db_migrations/versions/0a8213491aaa_drop_duplicate_killed_constraint.py +49 -0
- mlflow/store/db_migrations/versions/0c779009ac13_add_deleted_time_field_to_runs_table.py +24 -0
- mlflow/store/db_migrations/versions/181f10493468_allow_nulls_for_metric_values.py +35 -0
- mlflow/store/db_migrations/versions/27a6a02d2cf1_add_model_version_tags_table.py +38 -0
- mlflow/store/db_migrations/versions/2b4d017a5e9b_add_model_registry_tables_to_db.py +77 -0
- mlflow/store/db_migrations/versions/2d6e25af4d3e_increase_max_param_val_length.py +33 -0
- mlflow/store/db_migrations/versions/3500859a5d39_add_model_aliases_table.py +50 -0
- mlflow/store/db_migrations/versions/39d1c3be5f05_add_is_nan_constraint_for_metrics_tables_if_necessary.py +41 -0
- mlflow/store/db_migrations/versions/400f98739977_add_logged_model_tables.py +123 -0
- mlflow/store/db_migrations/versions/4465047574b1_increase_max_dataset_schema_size.py +38 -0
- mlflow/store/db_migrations/versions/451aebb31d03_add_metric_step.py +35 -0
- mlflow/store/db_migrations/versions/5b0e9adcef9c_add_cascade_deletion_to_trace_tables_fk.py +40 -0
- mlflow/store/db_migrations/versions/6953534de441_add_step_to_inputs_table.py +25 -0
- mlflow/store/db_migrations/versions/728d730b5ebd_add_registered_model_tags_table.py +38 -0
- mlflow/store/db_migrations/versions/7ac759974ad8_update_run_tags_with_larger_limit.py +36 -0
- mlflow/store/db_migrations/versions/7f2a7d5fae7d_add_datasets_inputs_input_tags_tables.py +82 -0
- mlflow/store/db_migrations/versions/84291f40a231_add_run_link_to_model_version.py +26 -0
- mlflow/store/db_migrations/versions/867495a8f9d4_add_trace_tables.py +90 -0
- mlflow/store/db_migrations/versions/89d4b8295536_create_latest_metrics_table.py +169 -0
- mlflow/store/db_migrations/versions/90e64c465722_migrate_user_column_to_tags.py +64 -0
- mlflow/store/db_migrations/versions/97727af70f4d_creation_time_last_update_time_experiments.py +25 -0
- mlflow/store/db_migrations/versions/__init__.py +0 -0
- mlflow/store/db_migrations/versions/a8c4a736bde6_allow_nulls_for_run_id.py +27 -0
- mlflow/store/db_migrations/versions/acf3f17fdcc7_add_storage_location_field_to_model_.py +29 -0
- mlflow/store/db_migrations/versions/bd07f7e963c5_create_index_on_run_uuid.py +26 -0
- mlflow/store/db_migrations/versions/bda7b8c39065_increase_model_version_tag_value_limit.py +38 -0
- mlflow/store/db_migrations/versions/c48cb773bb87_reset_default_value_for_is_nan_in_metrics_table_for_mysql.py +41 -0
- mlflow/store/db_migrations/versions/cbc13b556ace_add_v3_trace_schema_columns.py +31 -0
- mlflow/store/db_migrations/versions/cc1f77228345_change_param_value_length_to_500.py +34 -0
- mlflow/store/db_migrations/versions/cfd24bdc0731_update_run_status_constraint_with_killed.py +78 -0
- mlflow/store/db_migrations/versions/df50e92ffc5e_add_experiment_tags_table.py +38 -0
- mlflow/store/db_migrations/versions/f5a4f2784254_increase_run_tag_value_limit.py +36 -0
- mlflow/store/entities/__init__.py +3 -0
- mlflow/store/entities/paged_list.py +18 -0
- mlflow/store/model_registry/__init__.py +10 -0
- mlflow/store/model_registry/abstract_store.py +1081 -0
- mlflow/store/model_registry/base_rest_store.py +44 -0
- mlflow/store/model_registry/databricks_workspace_model_registry_rest_store.py +37 -0
- mlflow/store/model_registry/dbmodels/__init__.py +0 -0
- mlflow/store/model_registry/dbmodels/models.py +206 -0
- mlflow/store/model_registry/file_store.py +1091 -0
- mlflow/store/model_registry/rest_store.py +481 -0
- mlflow/store/model_registry/sqlalchemy_store.py +1286 -0
- mlflow/store/tracking/__init__.py +23 -0
- mlflow/store/tracking/abstract_store.py +816 -0
- mlflow/store/tracking/dbmodels/__init__.py +0 -0
- mlflow/store/tracking/dbmodels/initial_models.py +243 -0
- mlflow/store/tracking/dbmodels/models.py +1073 -0
- mlflow/store/tracking/file_store.py +2438 -0
- mlflow/store/tracking/postgres_managed_identity.py +146 -0
- mlflow/store/tracking/rest_store.py +1131 -0
- mlflow/store/tracking/sqlalchemy_store.py +2785 -0
- mlflow/system_metrics/__init__.py +61 -0
- mlflow/system_metrics/metrics/__init__.py +0 -0
- mlflow/system_metrics/metrics/base_metrics_monitor.py +32 -0
- mlflow/system_metrics/metrics/cpu_monitor.py +23 -0
- mlflow/system_metrics/metrics/disk_monitor.py +21 -0
- mlflow/system_metrics/metrics/gpu_monitor.py +71 -0
- mlflow/system_metrics/metrics/network_monitor.py +34 -0
- mlflow/system_metrics/metrics/rocm_monitor.py +123 -0
- mlflow/system_metrics/system_metrics_monitor.py +198 -0
- mlflow/tracing/__init__.py +16 -0
- mlflow/tracing/assessment.py +356 -0
- mlflow/tracing/client.py +531 -0
- mlflow/tracing/config.py +125 -0
- mlflow/tracing/constant.py +105 -0
- mlflow/tracing/destination.py +81 -0
- mlflow/tracing/display/__init__.py +40 -0
- mlflow/tracing/display/display_handler.py +196 -0
- mlflow/tracing/export/async_export_queue.py +186 -0
- mlflow/tracing/export/inference_table.py +138 -0
- mlflow/tracing/export/mlflow_v3.py +137 -0
- mlflow/tracing/export/utils.py +70 -0
- mlflow/tracing/fluent.py +1417 -0
- mlflow/tracing/processor/base_mlflow.py +199 -0
- mlflow/tracing/processor/inference_table.py +175 -0
- mlflow/tracing/processor/mlflow_v3.py +47 -0
- mlflow/tracing/processor/otel.py +73 -0
- mlflow/tracing/provider.py +487 -0
- mlflow/tracing/trace_manager.py +200 -0
- mlflow/tracing/utils/__init__.py +616 -0
- mlflow/tracing/utils/artifact_utils.py +28 -0
- mlflow/tracing/utils/copy.py +55 -0
- mlflow/tracing/utils/environment.py +55 -0
- mlflow/tracing/utils/exception.py +21 -0
- mlflow/tracing/utils/once.py +35 -0
- mlflow/tracing/utils/otlp.py +63 -0
- mlflow/tracing/utils/processor.py +54 -0
- mlflow/tracing/utils/search.py +292 -0
- mlflow/tracing/utils/timeout.py +250 -0
- mlflow/tracing/utils/token.py +19 -0
- mlflow/tracing/utils/truncation.py +124 -0
- mlflow/tracing/utils/warning.py +76 -0
- mlflow/tracking/__init__.py +39 -0
- mlflow/tracking/_model_registry/__init__.py +1 -0
- mlflow/tracking/_model_registry/client.py +764 -0
- mlflow/tracking/_model_registry/fluent.py +853 -0
- mlflow/tracking/_model_registry/registry.py +67 -0
- mlflow/tracking/_model_registry/utils.py +251 -0
- mlflow/tracking/_tracking_service/__init__.py +0 -0
- mlflow/tracking/_tracking_service/client.py +883 -0
- mlflow/tracking/_tracking_service/registry.py +56 -0
- mlflow/tracking/_tracking_service/utils.py +275 -0
- mlflow/tracking/artifact_utils.py +179 -0
- mlflow/tracking/client.py +5900 -0
- mlflow/tracking/context/__init__.py +0 -0
- mlflow/tracking/context/abstract_context.py +35 -0
- mlflow/tracking/context/databricks_cluster_context.py +15 -0
- mlflow/tracking/context/databricks_command_context.py +15 -0
- mlflow/tracking/context/databricks_job_context.py +49 -0
- mlflow/tracking/context/databricks_notebook_context.py +41 -0
- mlflow/tracking/context/databricks_repo_context.py +43 -0
- mlflow/tracking/context/default_context.py +51 -0
- mlflow/tracking/context/git_context.py +32 -0
- mlflow/tracking/context/registry.py +98 -0
- mlflow/tracking/context/system_environment_context.py +15 -0
- mlflow/tracking/default_experiment/__init__.py +1 -0
- mlflow/tracking/default_experiment/abstract_context.py +43 -0
- mlflow/tracking/default_experiment/databricks_notebook_experiment_provider.py +44 -0
- mlflow/tracking/default_experiment/registry.py +75 -0
- mlflow/tracking/fluent.py +3595 -0
- mlflow/tracking/metric_value_conversion_utils.py +93 -0
- mlflow/tracking/multimedia.py +206 -0
- mlflow/tracking/registry.py +86 -0
- mlflow/tracking/request_auth/__init__.py +0 -0
- mlflow/tracking/request_auth/abstract_request_auth_provider.py +34 -0
- mlflow/tracking/request_auth/registry.py +60 -0
- mlflow/tracking/request_header/__init__.py +0 -0
- mlflow/tracking/request_header/abstract_request_header_provider.py +36 -0
- mlflow/tracking/request_header/databricks_request_header_provider.py +38 -0
- mlflow/tracking/request_header/default_request_header_provider.py +17 -0
- mlflow/tracking/request_header/registry.py +79 -0
- mlflow/transformers/__init__.py +2982 -0
- mlflow/transformers/flavor_config.py +258 -0
- mlflow/transformers/hub_utils.py +83 -0
- mlflow/transformers/llm_inference_utils.py +468 -0
- mlflow/transformers/model_io.py +301 -0
- mlflow/transformers/peft.py +51 -0
- mlflow/transformers/signature.py +183 -0
- mlflow/transformers/torch_utils.py +55 -0
- mlflow/types/__init__.py +21 -0
- mlflow/types/agent.py +270 -0
- mlflow/types/chat.py +240 -0
- mlflow/types/llm.py +935 -0
- mlflow/types/responses.py +139 -0
- mlflow/types/responses_helpers.py +416 -0
- mlflow/types/schema.py +1505 -0
- mlflow/types/type_hints.py +647 -0
- mlflow/types/utils.py +753 -0
- mlflow/utils/__init__.py +283 -0
- mlflow/utils/_capture_modules.py +256 -0
- mlflow/utils/_capture_transformers_modules.py +75 -0
- mlflow/utils/_spark_utils.py +201 -0
- mlflow/utils/_unity_catalog_oss_utils.py +97 -0
- mlflow/utils/_unity_catalog_utils.py +479 -0
- mlflow/utils/annotations.py +218 -0
- mlflow/utils/arguments_utils.py +16 -0
- mlflow/utils/async_logging/__init__.py +1 -0
- mlflow/utils/async_logging/async_artifacts_logging_queue.py +258 -0
- mlflow/utils/async_logging/async_logging_queue.py +366 -0
- mlflow/utils/async_logging/run_artifact.py +38 -0
- mlflow/utils/async_logging/run_batch.py +58 -0
- mlflow/utils/async_logging/run_operations.py +49 -0
- mlflow/utils/autologging_utils/__init__.py +737 -0
- mlflow/utils/autologging_utils/client.py +432 -0
- mlflow/utils/autologging_utils/config.py +33 -0
- mlflow/utils/autologging_utils/events.py +294 -0
- mlflow/utils/autologging_utils/logging_and_warnings.py +328 -0
- mlflow/utils/autologging_utils/metrics_queue.py +71 -0
- mlflow/utils/autologging_utils/safety.py +1104 -0
- mlflow/utils/autologging_utils/versioning.py +95 -0
- mlflow/utils/checkpoint_utils.py +206 -0
- mlflow/utils/class_utils.py +6 -0
- mlflow/utils/cli_args.py +257 -0
- mlflow/utils/conda.py +354 -0
- mlflow/utils/credentials.py +231 -0
- mlflow/utils/data_utils.py +17 -0
- mlflow/utils/databricks_utils.py +1436 -0
- mlflow/utils/docstring_utils.py +477 -0
- mlflow/utils/doctor.py +133 -0
- mlflow/utils/download_cloud_file_chunk.py +43 -0
- mlflow/utils/env_manager.py +16 -0
- mlflow/utils/env_pack.py +131 -0
- mlflow/utils/environment.py +1009 -0
- mlflow/utils/exception_utils.py +14 -0
- mlflow/utils/file_utils.py +978 -0
- mlflow/utils/git_utils.py +77 -0
- mlflow/utils/gorilla.py +797 -0
- mlflow/utils/import_hooks/__init__.py +363 -0
- mlflow/utils/lazy_load.py +51 -0
- mlflow/utils/logging_utils.py +168 -0
- mlflow/utils/mime_type_utils.py +58 -0
- mlflow/utils/mlflow_tags.py +103 -0
- mlflow/utils/model_utils.py +486 -0
- mlflow/utils/name_utils.py +346 -0
- mlflow/utils/nfs_on_spark.py +62 -0
- mlflow/utils/openai_utils.py +164 -0
- mlflow/utils/os.py +12 -0
- mlflow/utils/oss_registry_utils.py +29 -0
- mlflow/utils/plugins.py +17 -0
- mlflow/utils/process.py +182 -0
- mlflow/utils/promptlab_utils.py +146 -0
- mlflow/utils/proto_json_utils.py +743 -0
- mlflow/utils/pydantic_utils.py +54 -0
- mlflow/utils/request_utils.py +279 -0
- mlflow/utils/requirements_utils.py +704 -0
- mlflow/utils/rest_utils.py +673 -0
- mlflow/utils/search_logged_model_utils.py +127 -0
- mlflow/utils/search_utils.py +2111 -0
- mlflow/utils/secure_loading.py +221 -0
- mlflow/utils/security_validation.py +384 -0
- mlflow/utils/server_cli_utils.py +61 -0
- mlflow/utils/spark_utils.py +15 -0
- mlflow/utils/string_utils.py +138 -0
- mlflow/utils/thread_utils.py +63 -0
- mlflow/utils/time.py +54 -0
- mlflow/utils/timeout.py +42 -0
- mlflow/utils/uri.py +572 -0
- mlflow/utils/validation.py +662 -0
- mlflow/utils/virtualenv.py +458 -0
- mlflow/utils/warnings_utils.py +25 -0
- mlflow/utils/yaml_utils.py +179 -0
- mlflow/version.py +24 -0
@@ -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
|