from __future__ import annotations from activation_drift_monitor import ActivationDriftMonitor from activation_drift_monitor.mcp_server import describe_surface from activation_drift_monitor.metrics import ood_metrics_from_scores, rbf_mmd2_from_gaussian def test_monitor_flags_shift_after_warmup() -> None: monitor = ActivationDriftMonitor(warmup_batches=2, sensitivity=1.2, alert_cooldown=0) monitor.profile_reference("layer", [0.0, 0.1, -0.1, 0.05]) monitor.profile_reference("layer", [0.02, -0.02, 0.0, 0.01]) stable = monitor.evaluate_batch({"layer": [0.03, -0.01, 0.0, 0.02]}) assert stable.global_alert is False shifted = monitor.evaluate_batch({"layer": [1.0, 0.95, 1.1, 1.05]}) assert shifted.global_alert is True assert shifted.layer_alerts["layer"].score.fused_score > 1.2 def test_metrics_and_mmd_outputs() -> None: metrics = ood_metrics_from_scores( id_scores=[0.1, 0.2, 0.3, 0.4], ood_scores=[0.7, 0.8, 0.9, 1.0], ) assert metrics["auroc"] > 0.9 assert 0.0 <= metrics["fpr"] <= 1.0 assert 0.0 <= metrics["tpr"] <= 1.0 low = rbf_mmd2_from_gaussian(mean_shift=0.1, var_ratio=1.0, gamma=1.0) high = rbf_mmd2_from_gaussian(mean_shift=1.0, var_ratio=1.0, gamma=1.0) assert high > low def test_mcp_surface_contains_real_tools() -> None: surface = describe_surface() tool_names = {tool["name"] for tool in surface["tools"]} assert {"profile_reference", "evaluate_batch", "reset_monitor", "get_state"}.issubset(tool_names) assert surface["transport"] == "stdio"