Terminal / benchmarks /shadow_telemetry.py
Baida07's picture
sync: 166 file da Baida98/AI@a6ac2424e11e5c320c5ff688e1ce7addac64cdab (local-fallback deploy-all) (#47)
ed28aa2
Raw
History Blame
3.95 kB
"""Fail-open shadow telemetry for benchmark output validators.
Shadow mode records validator outcomes only. It never changes the answer, retry
budget, provider selection, or benchmark score. Raw model output is deliberately
not persisted; only length and normalized validator evidence are stored.
"""
from __future__ import annotations
from datetime import datetime, timezone
import json
import os
from pathlib import Path
import threading
from typing import Any, Mapping, Optional
from .validators import ValidationResult, validate_coding_output, validate_mmlu_output
_ENABLED_VALUES = frozenset({"1", "true", "yes", "on"})
_WRITE_LOCK = threading.Lock()
def shadow_enabled() -> bool:
return os.getenv("BENCHMARK_SHADOW_MODE", "0").strip().lower() in _ENABLED_VALUES
def infer_benchmark_category(goal: Any) -> Optional[str]:
"""Infer only the two supported benchmark categories from explicit markers."""
text = str(goal or "")
lowered = text.lower()
if "mmlu" in lowered or "scelta multipla" in lowered or "a/b/c/d" in lowered:
return "mmlu"
if "code_correct" in lowered or "typescript" in lowered or "```typescript" in lowered:
return "coding"
return None
def _safe_metadata(metadata: Optional[Mapping[str, Any]]) -> dict[str, Any]:
allowed = {
"provider",
"model",
"profile",
"attempt",
"latency_ms",
"first_token_ms",
"task_id",
"source",
}
safe: dict[str, Any] = {}
for key in allowed:
value = (metadata or {}).get(key)
if value is None:
continue
if isinstance(value, (str, int, float, bool)):
safe[key] = value
else:
safe[key] = str(value)[:120]
return safe
def _evidence_for_log(result: ValidationResult) -> dict[str, Any]:
evidence: dict[str, Any] = {}
for key, value in result.evidence.items():
if key == "source_length":
evidence[key] = value
elif key in {"candidates", "distinct_candidates", "required_symbols", "missing_symbols", "declarations", "fence_count", "languages", "extraction", "significant_lines", "correct", "expected", "has_import_or_export", "has_syntax_tokens"}:
evidence[key] = value
return evidence
def _log_path() -> Path:
return Path(os.getenv("BENCHMARK_SHADOW_LOG_PATH", "/tmp/baida98-benchmark-shadow.jsonl"))
def _append_event(event: dict[str, Any]) -> None:
path = _log_path()
path.parent.mkdir(parents=True, exist_ok=True)
with _WRITE_LOCK:
with path.open("a", encoding="utf-8") as handle:
handle.write(json.dumps(event, ensure_ascii=False, separators=(",", ":")) + "\n")
def validate_and_record_shadow(
*,
goal: Any,
answer: Any,
metadata: Optional[Mapping[str, Any]] = None,
) -> Optional[ValidationResult]:
"""Validate and record a supported benchmark response in fail-open shadow mode."""
if not shadow_enabled():
return None
category = infer_benchmark_category(goal)
if category is None:
return None
if category == "mmlu":
result = validate_mmlu_output(answer)
validator = "mmlu_v1"
else:
result = validate_coding_output(answer)
validator = "coding_v1"
text = answer if isinstance(answer, str) else str(answer or "")
event = {
"schema_version": 1,
"event": "benchmark_shadow_validation",
"timestamp": datetime.now(timezone.utc).isoformat(),
"category": category,
"validator": validator,
"valid": result.valid,
"failure_code": result.failure_code,
"response_chars": len(text),
"evidence": _evidence_for_log(result),
"metadata": _safe_metadata(metadata),
}
try:
_append_event(event)
except Exception:
# Shadow telemetry must never break the agent loop.
return result
return result