Rossmann-Store-Sales / src /serving /monitoring.py
ymlin105's picture
feat: add offline drift checks and inference logging
798c69b
import json
from datetime import datetime, timezone
from pathlib import Path
from src.shared.config import PROJECT_ROOT
DEFAULT_INFERENCE_LOG_PATH = PROJECT_ROOT / "logs" / "inference_requests.jsonl"
def build_inference_log_entry(
*,
store: int,
start_date: str,
forecast_days: int,
promo: int,
state_holiday: str,
school_holiday: int,
model_version: str,
latency_ms: float,
) -> dict[str, object]:
"""Builds a single structured inference log event."""
return {
"timestamp_utc": datetime.now(timezone.utc).isoformat(),
"store": store,
"start_date": start_date,
"forecast_days": forecast_days,
"promo": promo,
"state_holiday": state_holiday,
"school_holiday": school_holiday,
"model_version": model_version,
"latency_ms": round(latency_ms, 3),
}
def append_jsonl_record(path: Path, payload: dict[str, object]) -> None:
"""Appends a JSON line to the configured log file."""
path.parent.mkdir(parents=True, exist_ok=True)
with path.open("a", encoding="utf-8") as f:
f.write(json.dumps(payload) + "\n")