Source code for endgame.tracking
from __future__ import annotations
"""Experiment tracking for Endgame.
Provides pluggable experiment logging backends for tracking
model training params, metrics, and artifacts.
Example
-------
>>> from endgame.tracking import ConsoleLogger
>>> with ConsoleLogger() as logger:
... logger.log_params({"n_estimators": 100, "lr": 0.01})
... logger.log_metrics({"accuracy": 0.95, "f1": 0.93})
With MLflow (requires ``pip install endgame-ml[tracking]``):
>>> from endgame.tracking import MLflowLogger
>>> with MLflowLogger(experiment_name="my_experiment") as logger:
... logger.log_params({"model": "lgbm", "n_estimators": 2000})
... logger.log_metrics({"roc_auc": 0.934})
"""
from endgame.tracking.base import ExperimentLogger
from endgame.tracking.console_logger import ConsoleLogger
[docs]
def get_logger(backend: str = "console", **kwargs) -> ExperimentLogger:
"""Factory function to get a logger instance.
Parameters
----------
backend : str, default="console"
Logging backend: "console", "mlflow".
**kwargs
Arguments passed to the logger constructor.
Returns
-------
ExperimentLogger
Logger instance.
"""
if backend == "console":
return ConsoleLogger(**kwargs)
elif backend == "mlflow":
from endgame.tracking.mlflow_logger import MLflowLogger
return MLflowLogger(**kwargs)
else:
raise ValueError(
f"Unknown backend: {backend!r}. Supported: 'console', 'mlflow'."
)
__all__ = [
"ExperimentLogger",
"ConsoleLogger",
"MLflowLogger",
"get_logger",
]
def __getattr__(name: str):
if name == "MLflowLogger":
from endgame.tracking.mlflow_logger import MLflowLogger
return MLflowLogger
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")