Spaces:
Running
Running
| import json | |
| import os | |
| from pathlib import Path | |
| import tempfile | |
| import unittest | |
| from unittest.mock import patch | |
| from benchmarks.shadow_telemetry import validate_and_record_shadow | |
| class ShadowTelemetryTests(unittest.TestCase): | |
| def test_disabled_mode_does_not_write_or_validate(self): | |
| with tempfile.TemporaryDirectory() as directory: | |
| path = Path(directory) / "shadow.jsonl" | |
| with patch.dict(os.environ, {"BENCHMARK_SHADOW_MODE": "0", "BENCHMARK_SHADOW_LOG_PATH": str(path)}, clear=False): | |
| result = validate_and_record_shadow(goal="MMLU domanda A/B/C/D", answer="ANSWER: C") | |
| self.assertIsNone(result) | |
| self.assertFalse(path.exists()) | |
| def test_mmlu_failure_event_is_recorded_without_raw_answer(self): | |
| with tempfile.TemporaryDirectory() as directory: | |
| path = Path(directory) / "shadow.jsonl" | |
| raw = "RISPOSTA SEGRETA: il testo non deve essere salvato" | |
| with patch.dict(os.environ, {"BENCHMARK_SHADOW_MODE": "1", "BENCHMARK_SHADOW_LOG_PATH": str(path)}, clear=False): | |
| result = validate_and_record_shadow( | |
| goal="MMLU domanda di informatica A/B/C/D", | |
| answer=raw, | |
| metadata={"provider": "mock", "model": "test", "secret": "must-drop"}, | |
| ) | |
| self.assertIsNotNone(result) | |
| self.assertEqual(result.failure_code, "answer_missing") | |
| event = json.loads(path.read_text(encoding="utf-8")) | |
| self.assertEqual(event["category"], "mmlu") | |
| self.assertEqual(event["failure_code"], "answer_missing") | |
| self.assertEqual(event["metadata"], {"provider": "mock", "model": "test"}) | |
| self.assertNotIn(raw, path.read_text(encoding="utf-8")) | |
| def test_coding_failure_event_is_recorded(self): | |
| with tempfile.TemporaryDirectory() as directory: | |
| path = Path(directory) / "shadow.jsonl" | |
| with patch.dict(os.environ, {"BENCHMARK_SHADOW_MODE": "true", "BENCHMARK_SHADOW_LOG_PATH": str(path)}, clear=False): | |
| result = validate_and_record_shadow( | |
| goal="code_correct: implementa in TypeScript", | |
| answer="Non posso includere il codice.", | |
| metadata={"attempt": 1, "latency_ms": 123.4}, | |
| ) | |
| self.assertIsNotNone(result) | |
| self.assertEqual(result.failure_code, "code_missing") | |
| event = json.loads(path.read_text(encoding="utf-8")) | |
| self.assertEqual(event["validator"], "coding_v1") | |
| self.assertEqual(event["metadata"]["attempt"], 1) | |
| self.assertEqual(event["metadata"]["latency_ms"], 123.4) | |
| def test_unsupported_category_is_ignored(self): | |
| with tempfile.TemporaryDirectory() as directory: | |
| path = Path(directory) / "shadow.jsonl" | |
| with patch.dict(os.environ, {"BENCHMARK_SHADOW_MODE": "1", "BENCHMARK_SHADOW_LOG_PATH": str(path)}, clear=False): | |
| result = validate_and_record_shadow(goal="generic task", answer="output") | |
| self.assertIsNone(result) | |
| self.assertFalse(path.exists()) | |
| if __name__ == "__main__": | |
| unittest.main() | |