Files
2026-07-13 13:22:34 +08:00

451 lines
14 KiB
Python

"""
The ``mlflow`` module provides a high-level "fluent" API for starting and managing MLflow runs.
For example:
.. code:: python
import mlflow
mlflow.start_run()
mlflow.log_param("my", "param")
mlflow.log_metric("score", 100)
mlflow.end_run()
You can also use the context manager syntax like this:
.. code:: python
with mlflow.start_run() as run:
mlflow.log_param("my", "param")
mlflow.log_metric("score", 100)
which automatically terminates the run at the end of the ``with`` block.
The fluent tracking API is not currently threadsafe. Any concurrent callers to the tracking API must
implement mutual exclusion manually.
For a lower level API, see the :py:mod:`mlflow.client` module.
"""
import contextlib
from typing import TYPE_CHECKING
from mlflow.version import IS_TRACING_SDK_ONLY, VERSION
__version__ = VERSION
import mlflow.mismatch
# `check_version_mismatch` must be called here before importing any other modules
with contextlib.suppress(Exception):
mlflow.mismatch._check_version_mismatch()
if not IS_TRACING_SDK_ONLY:
from mlflow import (
artifacts, # noqa: F401
client, # noqa: F401
config, # noqa: F401
data, # noqa: F401
exceptions, # noqa: F401
genai, # noqa: F401
models, # noqa: F401
projects, # noqa: F401
tracking, # noqa: F401
)
from mlflow import tracing # noqa: F401
from mlflow.environment_variables import MLFLOW_CONFIGURE_LOGGING
from mlflow.exceptions import MlflowException
from mlflow.utils.lazy_load import LazyLoader
from mlflow.utils.logging_utils import (
_configure_mlflow_loggers,
_install_sensitive_query_param_filter,
)
# Lazily load mlflow flavors to avoid excessive dependencies.
anthropic = LazyLoader("mlflow.anthropic", globals(), "mlflow.anthropic")
ag2 = LazyLoader("mlflow.ag2", globals(), "mlflow.ag2")
agno = LazyLoader("mlflow.agno", globals(), "mlflow.agno")
autogen = LazyLoader("mlflow.autogen", globals(), "mlflow.autogen")
bedrock = LazyLoader("mlflow.bedrock", globals(), "mlflow.bedrock")
catboost = LazyLoader("mlflow.catboost", globals(), "mlflow.catboost")
crewai = LazyLoader("mlflow.crewai", globals(), "mlflow.crewai")
diffusers = LazyLoader("mlflow.diffusers", globals(), "mlflow.diffusers")
dspy = LazyLoader("mlflow.dspy", globals(), "mlflow.dspy")
gemini = LazyLoader("mlflow.gemini", globals(), "mlflow.gemini")
groq = LazyLoader("mlflow.groq", globals(), "mlflow.groq")
h2o = LazyLoader("mlflow.h2o", globals(), "mlflow.h2o")
haystack = LazyLoader("mlflow.haystack", globals(), "mlflow.haystack")
johnsnowlabs = LazyLoader("mlflow.johnsnowlabs", globals(), "mlflow.johnsnowlabs")
keras = LazyLoader("mlflow.keras", globals(), "mlflow.keras")
langchain = LazyLoader("mlflow.langchain", globals(), "mlflow.langchain")
lightgbm = LazyLoader("mlflow.lightgbm", globals(), "mlflow.lightgbm")
litellm = LazyLoader("mlflow.litellm", globals(), "mlflow.litellm")
llama_index = LazyLoader("mlflow.llama_index", globals(), "mlflow.llama_index")
metrics = LazyLoader("mlflow.metrics", globals(), "mlflow.metrics")
mistral = LazyLoader("mlflow.mistral", globals(), "mlflow.mistral")
onnx = LazyLoader("mlflow.onnx", globals(), "mlflow.onnx")
otel = LazyLoader("mlflow.otel", globals(), "mlflow.otel")
openai = LazyLoader("mlflow.openai", globals(), "mlflow.openai")
paddle = LazyLoader("mlflow.paddle", globals(), "mlflow.paddle")
pmdarima = LazyLoader("mlflow.pmdarima", globals(), "mlflow.pmdarima")
prophet = LazyLoader("mlflow.prophet", globals(), "mlflow.prophet")
pydantic_ai = LazyLoader("mlflow.pydantic_ai", globals(), "mlflow.pydantic_ai")
pyfunc = LazyLoader("mlflow.pyfunc", globals(), "mlflow.pyfunc")
pyspark = LazyLoader("mlflow.pyspark", globals(), "mlflow.pyspark")
pytorch = LazyLoader("mlflow.pytorch", globals(), "mlflow.pytorch")
rfunc = LazyLoader("mlflow.rfunc", globals(), "mlflow.rfunc")
semantic_kernel = LazyLoader("mlflow.semantic_kernel", globals(), "mlflow.semantic_kernel")
sentence_transformers = LazyLoader(
"mlflow.sentence_transformers",
globals(),
"mlflow.sentence_transformers",
)
shap = LazyLoader("mlflow.shap", globals(), "mlflow.shap")
sklearn = LazyLoader("mlflow.sklearn", globals(), "mlflow.sklearn")
smolagents = LazyLoader("mlflow.smolagents", globals(), "mlflow.smolagents")
spacy = LazyLoader("mlflow.spacy", globals(), "mlflow.spacy")
strands = LazyLoader("mlflow.strands", globals(), "mlflow.strands")
spark = LazyLoader("mlflow.spark", globals(), "mlflow.spark")
statsmodels = LazyLoader("mlflow.statsmodels", globals(), "mlflow.statsmodels")
tensorflow = LazyLoader("mlflow.tensorflow", globals(), "mlflow.tensorflow")
# TxtAI integration is defined at https://github.com/neuml/mlflow-txtai
txtai = LazyLoader("mlflow.txtai", globals(), "mlflow_txtai")
transformers = LazyLoader("mlflow.transformers", globals(), "mlflow.transformers")
xgboost = LazyLoader("mlflow.xgboost", globals(), "mlflow.xgboost")
if TYPE_CHECKING:
# Do not move this block above the lazy-loaded modules above.
# All the lazy-loaded modules above must be imported here for code completion to work in IDEs.
from mlflow import ( # noqa: F401
ag2,
agno,
anthropic,
autogen,
bedrock,
catboost,
crewai,
diffusers,
dspy,
gemini,
groq,
h2o,
haystack,
johnsnowlabs,
keras,
langchain,
lightgbm,
litellm,
llama_index,
metrics,
mistral,
onnx,
openai,
otel,
paddle,
pmdarima,
prophet,
pydantic_ai,
pyfunc,
pyspark,
pytorch,
rfunc,
semantic_kernel,
sentence_transformers,
shap,
sklearn,
smolagents,
spacy,
spark,
statsmodels,
strands,
tensorflow,
transformers,
xgboost,
)
_install_sensitive_query_param_filter()
if MLFLOW_CONFIGURE_LOGGING.get() is True:
_configure_mlflow_loggers(root_module_name=__name__)
# Core modules required for mlflow-tracing
from mlflow.tracing.assessment import (
delete_assessment,
get_assessment,
log_assessment,
log_expectation,
log_feedback,
log_issue,
override_feedback,
update_assessment,
)
from mlflow.tracing.context import context
from mlflow.tracing.fluent import (
add_trace,
delete_trace_tag,
get_active_trace_id,
get_current_active_span,
get_last_active_trace_id,
get_trace,
log_trace,
search_sessions,
search_traces,
set_trace_tag,
start_span,
start_span_no_context,
trace,
update_current_trace,
)
from mlflow.tracking import (
get_tracking_uri,
is_tracking_uri_set,
set_tracking_uri,
)
from mlflow.tracking.fluent import active_run, flush_trace_async_logging, set_experiment
# These are minimal set of APIs to be exposed via `mlflow-tracing` package.
# APIs listed here must not depend on dependencies that are not part of `mlflow-tracing` package.
__all__ = [
"MlflowException",
# Minimal tracking APIs required for tracing core functionality
"set_experiment",
"set_tracking_uri",
"get_tracking_uri",
"is_tracking_uri_set",
# NB: Tracing SDK doesn't support using Runs, however, active_run is used heavily within
# the autologging code base.
"active_run",
# Tracing APIs
"add_trace",
"context",
"delete_trace_tag",
"flush_trace_async_logging",
"get_active_trace_id",
"get_current_active_span",
"get_last_active_trace_id",
"get_trace",
"log_trace",
"search_sessions",
"search_traces",
"set_trace_tag",
"start_span",
"start_span_no_context",
"trace",
"update_current_trace",
# Assessment APIs
"get_assessment",
"delete_assessment",
"log_assessment",
"update_assessment",
"log_expectation",
"log_feedback",
"log_issue",
"override_feedback",
]
# Only import these modules when mlflow or mlflow-skinny is installed i.e. not importing them
# when only mlflow-tracing is installed.
if not IS_TRACING_SDK_ONLY:
from mlflow.client import MlflowClient
# For backward compatibility, we expose the following functions and classes at the top level in
# addition to `mlflow.config`.
from mlflow.config import (
disable_system_metrics_logging,
enable_system_metrics_logging,
get_registry_uri,
set_registry_uri,
set_system_metrics_node_id,
set_system_metrics_samples_before_logging,
set_system_metrics_sampling_interval,
)
from mlflow.models.evaluation.deprecated import evaluate
from mlflow.models.evaluation.validation import validate_evaluation_results
from mlflow.projects import run
from mlflow.pytest import test
from mlflow.tracking._model_registry.fluent import (
# TODO: Prompt Registry APIs are moved to the `mlflow.genai` namespace and direct
# imports from mlflow will be deprecated in the future.
delete_prompt_alias,
load_prompt,
register_model,
register_prompt,
search_model_versions,
search_prompts,
search_registered_models,
set_model_version_tag,
set_prompt_alias,
)
from mlflow.tracking._workspace.fluent import (
create_workspace,
delete_workspace,
get_workspace,
list_workspaces,
set_workspace,
update_workspace,
)
from mlflow.tracking.fluent import (
ActiveModel,
ActiveRun,
autolog,
clear_active_model,
create_experiment,
create_external_model,
delete_experiment,
delete_experiment_tag,
delete_logged_model_tag,
delete_run,
delete_tag,
end_run,
finalize_logged_model,
flush_artifact_async_logging,
flush_async_logging,
get_active_model_id,
get_artifact_uri,
get_experiment,
get_experiment_by_name,
get_logged_model,
get_parent_run,
get_run,
import_checkpoints,
initialize_logged_model,
last_active_run,
last_logged_model,
load_table,
log_artifact,
log_artifacts,
log_dict,
log_figure,
log_image,
log_input,
log_inputs,
log_metric,
log_metrics,
log_model_params,
log_outputs,
log_param,
log_params,
log_stream,
log_table,
log_text,
search_experiments,
search_logged_models,
search_runs,
set_active_model,
set_experiment_tag,
set_experiment_tags,
set_logged_model_tags,
set_tag,
set_tags,
start_run,
)
from mlflow.tracking.multimedia import Image
from mlflow.utils.async_logging.run_operations import RunOperations # noqa: F401
from mlflow.utils.credentials import login
from mlflow.utils.doctor import doctor
__all__ += [
"ActiveRun",
"ActiveModel",
"MlflowClient",
"MlflowException",
"autolog",
"clear_active_model",
"create_experiment",
"create_external_model",
"create_workspace",
"delete_experiment",
"delete_workspace",
"delete_run",
"delete_tag",
"disable_system_metrics_logging",
"doctor",
"enable_system_metrics_logging",
"end_run",
"evaluate",
"finalize_logged_model",
"flush_async_logging",
"flush_artifact_async_logging",
"get_active_model_id",
"get_artifact_uri",
"get_experiment",
"get_experiment_by_name",
"import_checkpoints",
"get_logged_model",
"get_workspace",
"get_parent_run",
"get_registry_uri",
"get_run",
"initialize_logged_model",
"last_active_run",
"last_logged_model",
"load_table",
"log_artifact",
"log_artifacts",
"log_dict",
"log_figure",
"log_image",
"log_input",
"log_inputs",
"log_model_params",
"log_outputs",
"log_metric",
"log_metrics",
"log_param",
"log_params",
"log_stream",
"log_table",
"log_text",
"login",
"pyfunc",
"register_model",
"run",
"search_experiments",
"search_logged_models",
"search_model_versions",
"search_registered_models",
"list_workspaces",
"search_runs",
"search_prompts",
"set_active_model",
"set_experiment_tag",
"set_experiment_tags",
"delete_experiment_tag",
"set_model_version_tag",
"set_registry_uri",
"set_system_metrics_node_id",
"set_system_metrics_samples_before_logging",
"set_system_metrics_sampling_interval",
"set_tag",
"set_tags",
"set_workspace",
"start_run",
"test",
"validate_evaluation_results",
"Image",
# Prompt Registry APIs
# TODO: Prompt Registry APIs are moved to the `mlflow.genai` namespace and direct
# imports from mlflow will be deprecated in the future.
"load_prompt",
"register_prompt",
"set_prompt_alias",
"delete_prompt_alias",
"set_logged_model_tags",
"delete_logged_model_tag",
"update_workspace",
]
# `mlflow.gateway` depends on optional dependencies such as pydantic, psutil, and has version
# restrictions for dependencies. Importing this module fails if they are not installed or
# if invalid versions of these required packages are installed.
with contextlib.suppress(Exception):
from mlflow import gateway # noqa: F401
__all__.append("gateway")
from mlflow.telemetry import set_telemetry_client
set_telemetry_client()