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
File without changes
|
@@ -0,0 +1,35 @@
|
|
1
|
+
from abc import ABCMeta, abstractmethod
|
2
|
+
|
3
|
+
from mlflow.utils.annotations import developer_stable
|
4
|
+
|
5
|
+
|
6
|
+
@developer_stable
|
7
|
+
class RunContextProvider:
|
8
|
+
"""
|
9
|
+
Abstract base class for context provider objects specifying custom tags at run-creation time
|
10
|
+
(e.g. tags specifying the git repo with which the run is associated).
|
11
|
+
|
12
|
+
When a run is created via the fluent ``mlflow.start_run`` method, MLflow iterates through all
|
13
|
+
registered RunContextProviders. For each context provider where ``in_context`` returns ``True``,
|
14
|
+
MLflow calls the ``tags`` method on the context provider to compute context tags for the run.
|
15
|
+
All context tags are then merged together and set on the newly-created run.
|
16
|
+
"""
|
17
|
+
|
18
|
+
__metaclass__ = ABCMeta
|
19
|
+
|
20
|
+
@abstractmethod
|
21
|
+
def in_context(self):
|
22
|
+
"""Determine if MLflow is running in this context.
|
23
|
+
|
24
|
+
Returns:
|
25
|
+
bool indicating if in this context.
|
26
|
+
|
27
|
+
"""
|
28
|
+
|
29
|
+
@abstractmethod
|
30
|
+
def tags(self):
|
31
|
+
"""Generate context-specific tags.
|
32
|
+
|
33
|
+
Returns:
|
34
|
+
dict of tags.
|
35
|
+
"""
|
@@ -0,0 +1,15 @@
|
|
1
|
+
from mlflow.tracking.context.abstract_context import RunContextProvider
|
2
|
+
from mlflow.utils import databricks_utils
|
3
|
+
from mlflow.utils.mlflow_tags import MLFLOW_DATABRICKS_CLUSTER_ID
|
4
|
+
|
5
|
+
|
6
|
+
class DatabricksClusterRunContext(RunContextProvider):
|
7
|
+
def in_context(self):
|
8
|
+
return databricks_utils.is_in_cluster()
|
9
|
+
|
10
|
+
def tags(self):
|
11
|
+
cluster_id = databricks_utils.get_cluster_id()
|
12
|
+
tags = {}
|
13
|
+
if cluster_id is not None:
|
14
|
+
tags[MLFLOW_DATABRICKS_CLUSTER_ID] = cluster_id
|
15
|
+
return tags
|
@@ -0,0 +1,15 @@
|
|
1
|
+
from mlflow.tracking.context.abstract_context import RunContextProvider
|
2
|
+
from mlflow.utils import databricks_utils
|
3
|
+
from mlflow.utils.mlflow_tags import MLFLOW_DATABRICKS_NOTEBOOK_COMMAND_ID
|
4
|
+
|
5
|
+
|
6
|
+
class DatabricksCommandRunContext(RunContextProvider):
|
7
|
+
def in_context(self):
|
8
|
+
return databricks_utils.get_job_group_id() is not None
|
9
|
+
|
10
|
+
def tags(self):
|
11
|
+
job_group_id = databricks_utils.get_job_group_id()
|
12
|
+
tags = {}
|
13
|
+
if job_group_id is not None:
|
14
|
+
tags[MLFLOW_DATABRICKS_NOTEBOOK_COMMAND_ID] = job_group_id
|
15
|
+
return tags
|
@@ -0,0 +1,49 @@
|
|
1
|
+
from mlflow.entities import SourceType
|
2
|
+
from mlflow.tracking.context.abstract_context import RunContextProvider
|
3
|
+
from mlflow.utils import databricks_utils
|
4
|
+
from mlflow.utils.mlflow_tags import (
|
5
|
+
MLFLOW_DATABRICKS_JOB_ID,
|
6
|
+
MLFLOW_DATABRICKS_JOB_RUN_ID,
|
7
|
+
MLFLOW_DATABRICKS_JOB_TYPE,
|
8
|
+
MLFLOW_DATABRICKS_WEBAPP_URL,
|
9
|
+
MLFLOW_DATABRICKS_WORKSPACE_ID,
|
10
|
+
MLFLOW_DATABRICKS_WORKSPACE_URL,
|
11
|
+
MLFLOW_SOURCE_NAME,
|
12
|
+
MLFLOW_SOURCE_TYPE,
|
13
|
+
)
|
14
|
+
|
15
|
+
|
16
|
+
class DatabricksJobRunContext(RunContextProvider):
|
17
|
+
def in_context(self):
|
18
|
+
return databricks_utils.is_in_databricks_job()
|
19
|
+
|
20
|
+
def tags(self):
|
21
|
+
job_id = databricks_utils.get_job_id()
|
22
|
+
job_run_id = databricks_utils.get_job_run_id()
|
23
|
+
job_type = databricks_utils.get_job_type()
|
24
|
+
webapp_url = databricks_utils.get_webapp_url()
|
25
|
+
workspace_url = databricks_utils.get_workspace_url()
|
26
|
+
workspace_url_fallback, workspace_id = databricks_utils.get_workspace_info_from_dbutils()
|
27
|
+
tags = {
|
28
|
+
MLFLOW_SOURCE_NAME: (
|
29
|
+
f"jobs/{job_id}/run/{job_run_id}"
|
30
|
+
if job_id is not None and job_run_id is not None
|
31
|
+
else None
|
32
|
+
),
|
33
|
+
MLFLOW_SOURCE_TYPE: SourceType.to_string(SourceType.JOB),
|
34
|
+
}
|
35
|
+
if job_id is not None:
|
36
|
+
tags[MLFLOW_DATABRICKS_JOB_ID] = job_id
|
37
|
+
if job_run_id is not None:
|
38
|
+
tags[MLFLOW_DATABRICKS_JOB_RUN_ID] = job_run_id
|
39
|
+
if job_type is not None:
|
40
|
+
tags[MLFLOW_DATABRICKS_JOB_TYPE] = job_type
|
41
|
+
if webapp_url is not None:
|
42
|
+
tags[MLFLOW_DATABRICKS_WEBAPP_URL] = webapp_url
|
43
|
+
if workspace_url is not None:
|
44
|
+
tags[MLFLOW_DATABRICKS_WORKSPACE_URL] = workspace_url
|
45
|
+
elif workspace_url_fallback is not None:
|
46
|
+
tags[MLFLOW_DATABRICKS_WORKSPACE_URL] = workspace_url_fallback
|
47
|
+
if workspace_id is not None:
|
48
|
+
tags[MLFLOW_DATABRICKS_WORKSPACE_ID] = workspace_id
|
49
|
+
return tags
|
@@ -0,0 +1,41 @@
|
|
1
|
+
from mlflow.entities import SourceType
|
2
|
+
from mlflow.tracking.context.abstract_context import RunContextProvider
|
3
|
+
from mlflow.utils import databricks_utils
|
4
|
+
from mlflow.utils.mlflow_tags import (
|
5
|
+
MLFLOW_DATABRICKS_NOTEBOOK_ID,
|
6
|
+
MLFLOW_DATABRICKS_NOTEBOOK_PATH,
|
7
|
+
MLFLOW_DATABRICKS_WEBAPP_URL,
|
8
|
+
MLFLOW_DATABRICKS_WORKSPACE_ID,
|
9
|
+
MLFLOW_DATABRICKS_WORKSPACE_URL,
|
10
|
+
MLFLOW_SOURCE_NAME,
|
11
|
+
MLFLOW_SOURCE_TYPE,
|
12
|
+
)
|
13
|
+
|
14
|
+
|
15
|
+
class DatabricksNotebookRunContext(RunContextProvider):
|
16
|
+
def in_context(self):
|
17
|
+
return databricks_utils.is_in_databricks_notebook()
|
18
|
+
|
19
|
+
def tags(self):
|
20
|
+
notebook_id = databricks_utils.get_notebook_id()
|
21
|
+
notebook_path = databricks_utils.get_notebook_path()
|
22
|
+
webapp_url = databricks_utils.get_webapp_url()
|
23
|
+
workspace_url = databricks_utils.get_workspace_url()
|
24
|
+
workspace_url_fallback, workspace_id = databricks_utils.get_workspace_info_from_dbutils()
|
25
|
+
tags = {
|
26
|
+
MLFLOW_SOURCE_NAME: notebook_path,
|
27
|
+
MLFLOW_SOURCE_TYPE: SourceType.to_string(SourceType.NOTEBOOK),
|
28
|
+
}
|
29
|
+
if notebook_id is not None:
|
30
|
+
tags[MLFLOW_DATABRICKS_NOTEBOOK_ID] = notebook_id
|
31
|
+
if notebook_path is not None:
|
32
|
+
tags[MLFLOW_DATABRICKS_NOTEBOOK_PATH] = notebook_path
|
33
|
+
if webapp_url is not None:
|
34
|
+
tags[MLFLOW_DATABRICKS_WEBAPP_URL] = webapp_url
|
35
|
+
if workspace_url is not None:
|
36
|
+
tags[MLFLOW_DATABRICKS_WORKSPACE_URL] = workspace_url
|
37
|
+
elif workspace_url_fallback is not None:
|
38
|
+
tags[MLFLOW_DATABRICKS_WORKSPACE_URL] = workspace_url_fallback
|
39
|
+
if workspace_id is not None:
|
40
|
+
tags[MLFLOW_DATABRICKS_WORKSPACE_ID] = workspace_id
|
41
|
+
return tags
|
@@ -0,0 +1,43 @@
|
|
1
|
+
from mlflow.tracking.context.abstract_context import RunContextProvider
|
2
|
+
from mlflow.utils import databricks_utils
|
3
|
+
from mlflow.utils.mlflow_tags import (
|
4
|
+
MLFLOW_DATABRICKS_GIT_REPO_COMMIT,
|
5
|
+
MLFLOW_DATABRICKS_GIT_REPO_PROVIDER,
|
6
|
+
MLFLOW_DATABRICKS_GIT_REPO_REFERENCE,
|
7
|
+
MLFLOW_DATABRICKS_GIT_REPO_REFERENCE_TYPE,
|
8
|
+
MLFLOW_DATABRICKS_GIT_REPO_RELATIVE_PATH,
|
9
|
+
MLFLOW_DATABRICKS_GIT_REPO_STATUS,
|
10
|
+
MLFLOW_DATABRICKS_GIT_REPO_URL,
|
11
|
+
)
|
12
|
+
|
13
|
+
|
14
|
+
class DatabricksRepoRunContext(RunContextProvider):
|
15
|
+
def in_context(self):
|
16
|
+
return databricks_utils.is_in_databricks_repo()
|
17
|
+
|
18
|
+
def tags(self):
|
19
|
+
tags = {}
|
20
|
+
git_repo_url = databricks_utils.get_git_repo_url()
|
21
|
+
git_repo_provider = databricks_utils.get_git_repo_provider()
|
22
|
+
git_repo_commit = databricks_utils.get_git_repo_commit()
|
23
|
+
git_repo_relative_path = databricks_utils.get_git_repo_relative_path()
|
24
|
+
git_repo_reference = databricks_utils.get_git_repo_reference()
|
25
|
+
git_repo_reference_type = databricks_utils.get_git_repo_reference_type()
|
26
|
+
git_repo_status = databricks_utils.get_git_repo_status()
|
27
|
+
|
28
|
+
if git_repo_url is not None:
|
29
|
+
tags[MLFLOW_DATABRICKS_GIT_REPO_URL] = git_repo_url
|
30
|
+
if git_repo_provider is not None:
|
31
|
+
tags[MLFLOW_DATABRICKS_GIT_REPO_PROVIDER] = git_repo_provider
|
32
|
+
if git_repo_commit is not None:
|
33
|
+
tags[MLFLOW_DATABRICKS_GIT_REPO_COMMIT] = git_repo_commit
|
34
|
+
if git_repo_relative_path is not None:
|
35
|
+
tags[MLFLOW_DATABRICKS_GIT_REPO_RELATIVE_PATH] = git_repo_relative_path
|
36
|
+
if git_repo_reference is not None:
|
37
|
+
tags[MLFLOW_DATABRICKS_GIT_REPO_REFERENCE] = git_repo_reference
|
38
|
+
if git_repo_reference_type is not None:
|
39
|
+
tags[MLFLOW_DATABRICKS_GIT_REPO_REFERENCE_TYPE] = git_repo_reference_type
|
40
|
+
if git_repo_status is not None:
|
41
|
+
tags[MLFLOW_DATABRICKS_GIT_REPO_STATUS] = git_repo_status
|
42
|
+
|
43
|
+
return tags
|
@@ -0,0 +1,51 @@
|
|
1
|
+
import getpass
|
2
|
+
import sys
|
3
|
+
|
4
|
+
from mlflow.entities import SourceType
|
5
|
+
from mlflow.tracking.context.abstract_context import RunContextProvider
|
6
|
+
from mlflow.utils.credentials import read_mlflow_creds
|
7
|
+
from mlflow.utils.mlflow_tags import (
|
8
|
+
MLFLOW_SOURCE_NAME,
|
9
|
+
MLFLOW_SOURCE_TYPE,
|
10
|
+
MLFLOW_USER,
|
11
|
+
)
|
12
|
+
|
13
|
+
_DEFAULT_USER = "unknown"
|
14
|
+
|
15
|
+
|
16
|
+
def _get_user():
|
17
|
+
"""Get the current computer username."""
|
18
|
+
try:
|
19
|
+
return getpass.getuser()
|
20
|
+
except ImportError:
|
21
|
+
return _DEFAULT_USER
|
22
|
+
|
23
|
+
|
24
|
+
def _get_main_file():
|
25
|
+
if len(sys.argv) > 0:
|
26
|
+
return sys.argv[0]
|
27
|
+
return None
|
28
|
+
|
29
|
+
|
30
|
+
def _get_source_name():
|
31
|
+
main_file = _get_main_file()
|
32
|
+
if main_file is not None:
|
33
|
+
return main_file
|
34
|
+
return "<console>"
|
35
|
+
|
36
|
+
|
37
|
+
def _get_source_type():
|
38
|
+
return SourceType.LOCAL
|
39
|
+
|
40
|
+
|
41
|
+
class DefaultRunContext(RunContextProvider):
|
42
|
+
def in_context(self):
|
43
|
+
return True
|
44
|
+
|
45
|
+
def tags(self):
|
46
|
+
creds = read_mlflow_creds()
|
47
|
+
return {
|
48
|
+
MLFLOW_USER: creds.username or _get_user(),
|
49
|
+
MLFLOW_SOURCE_NAME: _get_source_name(),
|
50
|
+
MLFLOW_SOURCE_TYPE: SourceType.to_string(_get_source_type()),
|
51
|
+
}
|
@@ -0,0 +1,32 @@
|
|
1
|
+
import logging
|
2
|
+
|
3
|
+
from mlflow.tracking.context.abstract_context import RunContextProvider
|
4
|
+
from mlflow.tracking.context.default_context import _get_main_file
|
5
|
+
from mlflow.utils.git_utils import get_git_commit
|
6
|
+
from mlflow.utils.mlflow_tags import MLFLOW_GIT_COMMIT
|
7
|
+
|
8
|
+
_logger = logging.getLogger(__name__)
|
9
|
+
|
10
|
+
|
11
|
+
def _get_source_version():
|
12
|
+
main_file = _get_main_file()
|
13
|
+
if main_file is not None:
|
14
|
+
return get_git_commit(main_file)
|
15
|
+
return None
|
16
|
+
|
17
|
+
|
18
|
+
class GitRunContext(RunContextProvider):
|
19
|
+
def __init__(self):
|
20
|
+
self._cache = {}
|
21
|
+
|
22
|
+
@property
|
23
|
+
def _source_version(self):
|
24
|
+
if "source_version" not in self._cache:
|
25
|
+
self._cache["source_version"] = _get_source_version()
|
26
|
+
return self._cache["source_version"]
|
27
|
+
|
28
|
+
def in_context(self):
|
29
|
+
return self._source_version is not None
|
30
|
+
|
31
|
+
def tags(self):
|
32
|
+
return {MLFLOW_GIT_COMMIT: self._source_version}
|
@@ -0,0 +1,98 @@
|
|
1
|
+
import logging
|
2
|
+
import warnings
|
3
|
+
from typing import Optional
|
4
|
+
|
5
|
+
from mlflow.tracking.context.abstract_context import RunContextProvider
|
6
|
+
from mlflow.tracking.context.databricks_cluster_context import DatabricksClusterRunContext
|
7
|
+
from mlflow.tracking.context.databricks_command_context import DatabricksCommandRunContext
|
8
|
+
from mlflow.tracking.context.databricks_job_context import DatabricksJobRunContext
|
9
|
+
from mlflow.tracking.context.databricks_notebook_context import DatabricksNotebookRunContext
|
10
|
+
from mlflow.tracking.context.databricks_repo_context import DatabricksRepoRunContext
|
11
|
+
from mlflow.tracking.context.default_context import DefaultRunContext
|
12
|
+
from mlflow.tracking.context.git_context import GitRunContext
|
13
|
+
from mlflow.tracking.context.system_environment_context import SystemEnvironmentContext
|
14
|
+
from mlflow.utils.plugins import get_entry_points
|
15
|
+
|
16
|
+
_logger = logging.getLogger(__name__)
|
17
|
+
|
18
|
+
|
19
|
+
class RunContextProviderRegistry:
|
20
|
+
"""Registry for run context provider implementations
|
21
|
+
|
22
|
+
This class allows the registration of a run context provider which can be used to infer meta
|
23
|
+
information about the context of an MLflow experiment run. Implementations declared though the
|
24
|
+
entrypoints `mlflow.run_context_provider` group can be automatically registered through the
|
25
|
+
`register_entrypoints` method.
|
26
|
+
|
27
|
+
Registered run context providers can return tags that override those implemented in the core
|
28
|
+
library, however the order in which plugins are resolved is undefined.
|
29
|
+
"""
|
30
|
+
|
31
|
+
def __init__(self):
|
32
|
+
self._registry = []
|
33
|
+
|
34
|
+
def register(self, run_context_provider_cls):
|
35
|
+
self._registry.append(run_context_provider_cls())
|
36
|
+
|
37
|
+
def register_entrypoints(self):
|
38
|
+
"""Register tracking stores provided by other packages"""
|
39
|
+
for entrypoint in get_entry_points("mlflow.run_context_provider"):
|
40
|
+
try:
|
41
|
+
self.register(entrypoint.load())
|
42
|
+
except (AttributeError, ImportError) as exc:
|
43
|
+
warnings.warn(
|
44
|
+
'Failure attempting to register context provider "{}": {}'.format(
|
45
|
+
entrypoint.name, str(exc)
|
46
|
+
),
|
47
|
+
stacklevel=2,
|
48
|
+
)
|
49
|
+
|
50
|
+
def __iter__(self):
|
51
|
+
return iter(self._registry)
|
52
|
+
|
53
|
+
|
54
|
+
_run_context_provider_registry = RunContextProviderRegistry()
|
55
|
+
_run_context_provider_registry.register(DefaultRunContext)
|
56
|
+
_run_context_provider_registry.register(GitRunContext)
|
57
|
+
_run_context_provider_registry.register(DatabricksNotebookRunContext)
|
58
|
+
_run_context_provider_registry.register(DatabricksJobRunContext)
|
59
|
+
_run_context_provider_registry.register(DatabricksClusterRunContext)
|
60
|
+
_run_context_provider_registry.register(DatabricksCommandRunContext)
|
61
|
+
_run_context_provider_registry.register(DatabricksRepoRunContext)
|
62
|
+
_run_context_provider_registry.register(SystemEnvironmentContext)
|
63
|
+
|
64
|
+
_run_context_provider_registry.register_entrypoints()
|
65
|
+
|
66
|
+
|
67
|
+
def resolve_tags(tags=None, ignore: Optional[list[RunContextProvider]] = None):
|
68
|
+
"""Generate a set of tags for the current run context. Tags are resolved in the order,
|
69
|
+
contexts are registered. Argument tags are applied last.
|
70
|
+
|
71
|
+
This function iterates through all run context providers in the registry. Additional context
|
72
|
+
providers can be registered as described in
|
73
|
+
:py:class:`mlflow.tracking.context.RunContextProvider`.
|
74
|
+
|
75
|
+
Args:
|
76
|
+
tags: A dictionary of tags to override. If specified, tags passed in this argument will
|
77
|
+
override those inferred from the context.
|
78
|
+
ignore: A list of RunContextProvider classes to exclude from the resolution.
|
79
|
+
|
80
|
+
Returns:
|
81
|
+
A dictionary of resolved tags.
|
82
|
+
"""
|
83
|
+
ignore = ignore or []
|
84
|
+
all_tags = {}
|
85
|
+
for provider in _run_context_provider_registry:
|
86
|
+
if any(isinstance(provider, ig) for ig in ignore):
|
87
|
+
continue
|
88
|
+
|
89
|
+
try:
|
90
|
+
if provider.in_context():
|
91
|
+
all_tags.update(provider.tags())
|
92
|
+
except Exception as e:
|
93
|
+
_logger.warning("Encountered unexpected error during resolving tags: %s", e)
|
94
|
+
|
95
|
+
if tags is not None:
|
96
|
+
all_tags.update(tags)
|
97
|
+
|
98
|
+
return all_tags
|
@@ -0,0 +1,15 @@
|
|
1
|
+
import json
|
2
|
+
|
3
|
+
from mlflow.environment_variables import MLFLOW_RUN_CONTEXT
|
4
|
+
from mlflow.tracking.context.abstract_context import RunContextProvider
|
5
|
+
|
6
|
+
# The constant MLFLOW_RUN_CONTEXT_ENV_VAR is marked as @developer_stable
|
7
|
+
MLFLOW_RUN_CONTEXT_ENV_VAR = MLFLOW_RUN_CONTEXT.name
|
8
|
+
|
9
|
+
|
10
|
+
class SystemEnvironmentContext(RunContextProvider):
|
11
|
+
def in_context(self):
|
12
|
+
return MLFLOW_RUN_CONTEXT.defined
|
13
|
+
|
14
|
+
def tags(self):
|
15
|
+
return json.loads(MLFLOW_RUN_CONTEXT.get())
|
@@ -0,0 +1 @@
|
|
1
|
+
DEFAULT_EXPERIMENT_ID = "0"
|
@@ -0,0 +1,43 @@
|
|
1
|
+
from abc import ABCMeta, abstractmethod
|
2
|
+
|
3
|
+
from mlflow.utils.annotations import developer_stable
|
4
|
+
|
5
|
+
|
6
|
+
@developer_stable
|
7
|
+
class DefaultExperimentProvider:
|
8
|
+
"""
|
9
|
+
Abstract base class for objects that provide the ID of an MLflow Experiment based on the
|
10
|
+
current client context. For example, when the MLflow client is running in a Databricks Job,
|
11
|
+
a provider is used to obtain the ID of the MLflow Experiment associated with the Job.
|
12
|
+
|
13
|
+
Usually the experiment_id is set explicitly by the user, but if the experiment is not set,
|
14
|
+
MLflow computes a default experiment id based on different contexts.
|
15
|
+
When an experiment is created via the fluent ``mlflow.start_run`` method, MLflow iterates
|
16
|
+
through the registered ``DefaultExperimentProvider``s until it finds one whose
|
17
|
+
``in_context()`` method returns ``True``; MLflow then calls the provider's
|
18
|
+
``get_experiment_id()`` method and uses the resulting experiment ID for Tracking operations.
|
19
|
+
"""
|
20
|
+
|
21
|
+
__metaclass__ = ABCMeta
|
22
|
+
|
23
|
+
@abstractmethod
|
24
|
+
def in_context(self):
|
25
|
+
"""Determine if the MLflow client is running in a context where this provider can
|
26
|
+
identify an associated MLflow Experiment ID.
|
27
|
+
|
28
|
+
Returns:
|
29
|
+
True if the MLflow client is running in a context where the provider
|
30
|
+
can identify an associated MLflow Experiment ID. False otherwise.
|
31
|
+
|
32
|
+
"""
|
33
|
+
|
34
|
+
@abstractmethod
|
35
|
+
def get_experiment_id(self):
|
36
|
+
"""Provide the MLflow Experiment ID for the current MLflow client context.
|
37
|
+
|
38
|
+
Assumes that ``in_context()`` is ``True``.
|
39
|
+
|
40
|
+
Returns:
|
41
|
+
The ID of the MLflow Experiment associated with the current context.
|
42
|
+
|
43
|
+
"""
|
@@ -0,0 +1,44 @@
|
|
1
|
+
from mlflow.exceptions import MlflowException
|
2
|
+
from mlflow.protos import databricks_pb2
|
3
|
+
from mlflow.tracking.client import MlflowClient
|
4
|
+
from mlflow.tracking.default_experiment.abstract_context import DefaultExperimentProvider
|
5
|
+
from mlflow.utils import databricks_utils
|
6
|
+
from mlflow.utils.mlflow_tags import MLFLOW_EXPERIMENT_SOURCE_ID, MLFLOW_EXPERIMENT_SOURCE_TYPE
|
7
|
+
|
8
|
+
|
9
|
+
class DatabricksNotebookExperimentProvider(DefaultExperimentProvider):
|
10
|
+
_resolved_notebook_experiment_id = None
|
11
|
+
|
12
|
+
def in_context(self):
|
13
|
+
return databricks_utils.is_in_databricks_notebook()
|
14
|
+
|
15
|
+
def get_experiment_id(self):
|
16
|
+
if DatabricksNotebookExperimentProvider._resolved_notebook_experiment_id:
|
17
|
+
return DatabricksNotebookExperimentProvider._resolved_notebook_experiment_id
|
18
|
+
|
19
|
+
source_notebook_id = databricks_utils.get_notebook_id()
|
20
|
+
source_notebook_name = databricks_utils.get_notebook_path()
|
21
|
+
tags = {
|
22
|
+
MLFLOW_EXPERIMENT_SOURCE_ID: source_notebook_id,
|
23
|
+
}
|
24
|
+
|
25
|
+
if databricks_utils.is_in_databricks_repo_notebook():
|
26
|
+
tags[MLFLOW_EXPERIMENT_SOURCE_TYPE] = "REPO_NOTEBOOK"
|
27
|
+
|
28
|
+
# With the presence of the source id, the following is a get or create in which it will
|
29
|
+
# return the corresponding experiment if one exists for the repo notebook.
|
30
|
+
# For non-repo notebooks, it will raise an exception and we will use source_notebook_id
|
31
|
+
try:
|
32
|
+
experiment_id = MlflowClient().create_experiment(source_notebook_name, None, tags)
|
33
|
+
except MlflowException as e:
|
34
|
+
if e.error_code == databricks_pb2.ErrorCode.Name(
|
35
|
+
databricks_pb2.INVALID_PARAMETER_VALUE
|
36
|
+
):
|
37
|
+
# If determined that it is not a repo notebook
|
38
|
+
experiment_id = source_notebook_id
|
39
|
+
else:
|
40
|
+
raise e
|
41
|
+
|
42
|
+
DatabricksNotebookExperimentProvider._resolved_notebook_experiment_id = experiment_id
|
43
|
+
|
44
|
+
return experiment_id
|
@@ -0,0 +1,75 @@
|
|
1
|
+
import logging
|
2
|
+
import warnings
|
3
|
+
from typing import Optional
|
4
|
+
|
5
|
+
from mlflow.tracking import get_tracking_uri
|
6
|
+
from mlflow.tracking.default_experiment import DEFAULT_EXPERIMENT_ID
|
7
|
+
from mlflow.tracking.default_experiment.databricks_notebook_experiment_provider import (
|
8
|
+
DatabricksNotebookExperimentProvider,
|
9
|
+
)
|
10
|
+
from mlflow.utils.plugins import get_entry_points
|
11
|
+
from mlflow.utils.uri import is_databricks_uri
|
12
|
+
|
13
|
+
_logger = logging.getLogger(__name__)
|
14
|
+
# Listed below are the list of providers, which are used to provide MLflow Experiment IDs based on
|
15
|
+
# the current context where the MLflow client is running when the user has not explicitly set
|
16
|
+
# an experiment. The order below is the order in which the these providers are registered.
|
17
|
+
_EXPERIMENT_PROVIDERS = (DatabricksNotebookExperimentProvider,)
|
18
|
+
|
19
|
+
|
20
|
+
class DefaultExperimentProviderRegistry:
|
21
|
+
"""Registry for default experiment provider implementations
|
22
|
+
|
23
|
+
This class allows the registration of default experiment providers, which are used to provide
|
24
|
+
MLflow Experiment IDs based on the current context where the MLflow client is running when
|
25
|
+
the user has not explicitly set an experiment. Implementations declared though the entrypoints
|
26
|
+
`mlflow.default_experiment_provider` group can be automatically registered through the
|
27
|
+
`register_entrypoints` method.
|
28
|
+
"""
|
29
|
+
|
30
|
+
def __init__(self):
|
31
|
+
self._registry = []
|
32
|
+
|
33
|
+
def register(self, default_experiment_provider_cls):
|
34
|
+
self._registry.append(default_experiment_provider_cls())
|
35
|
+
|
36
|
+
def register_entrypoints(self):
|
37
|
+
"""Register tracking stores provided by other packages"""
|
38
|
+
for entrypoint in get_entry_points("mlflow.default_experiment_provider"):
|
39
|
+
try:
|
40
|
+
self.register(entrypoint.load())
|
41
|
+
except (AttributeError, ImportError) as exc:
|
42
|
+
warnings.warn(
|
43
|
+
"Failure attempting to register default experiment"
|
44
|
+
+ f'context provider "{entrypoint.name}": {exc}',
|
45
|
+
stacklevel=2,
|
46
|
+
)
|
47
|
+
|
48
|
+
def __iter__(self):
|
49
|
+
return iter(self._registry)
|
50
|
+
|
51
|
+
|
52
|
+
_default_experiment_provider_registry = DefaultExperimentProviderRegistry()
|
53
|
+
for exp_provider in _EXPERIMENT_PROVIDERS:
|
54
|
+
_default_experiment_provider_registry.register(exp_provider)
|
55
|
+
|
56
|
+
_default_experiment_provider_registry.register_entrypoints()
|
57
|
+
|
58
|
+
|
59
|
+
def get_experiment_id() -> Optional[str]:
|
60
|
+
"""Get an experiment ID for the current context.
|
61
|
+
|
62
|
+
The experiment ID is fetched by querying providers, in the order that they were registered.
|
63
|
+
This function iterates through all default experiment context providers in the registry.
|
64
|
+
|
65
|
+
Returns:
|
66
|
+
An experiment_id.
|
67
|
+
"""
|
68
|
+
for provider in _default_experiment_provider_registry:
|
69
|
+
try:
|
70
|
+
if provider.in_context():
|
71
|
+
return provider.get_experiment_id()
|
72
|
+
except Exception as e:
|
73
|
+
_logger.warning("Encountered unexpected error while getting experiment_id: %s", e)
|
74
|
+
|
75
|
+
return DEFAULT_EXPERIMENT_ID if not is_databricks_uri(get_tracking_uri()) else None
|