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