test_wp09_evaluation.py 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. from __future__ import annotations
  2. from pathlib import Path
  3. import pytest
  4. from app.core.llm.runtime_governance import (
  5. DatasetLeakageError,
  6. evaluate_governed_dataset,
  7. load_engineering_fixture,
  8. )
  9. def test_governed_eval_reports_k6_metrics_and_rejects_train_evaluation_overlap():
  10. result = evaluate_governed_dataset(
  11. train_case_ids={"train-1"},
  12. evaluation_cases=[
  13. {
  14. "case_id": "eval-1",
  15. "expected_evidence_id": "evidence-1",
  16. "retrieved_evidence_ids": ["evidence-1", "evidence-2"],
  17. "citation_evidence_ids": ["evidence-1"],
  18. "authorized": True,
  19. "fresh": True,
  20. },
  21. {
  22. "case_id": "eval-2",
  23. "expected_evidence_id": "evidence-2",
  24. "retrieved_evidence_ids": ["evidence-2"],
  25. "citation_evidence_ids": ["evidence-2"],
  26. "authorized": False,
  27. "fresh": False,
  28. },
  29. ],
  30. )
  31. assert result == {
  32. "recall": 1.0,
  33. "mrr": 1.0,
  34. "citation_correctness": 1.0,
  35. "privilege_violation_rate": 0.5,
  36. "freshness": 0.5,
  37. }
  38. with pytest.raises(DatasetLeakageError, match="dataset_leakage_detected"):
  39. evaluate_governed_dataset(
  40. train_case_ids={"eval-1"}, evaluation_cases=[{"case_id": "eval-1"}]
  41. )
  42. def test_fixture_manifest_has_real_digests_and_is_stably_read_once_per_file():
  43. manifest = Path(__file__).resolve().parents[2] / "docs/phase3/p3-wp09-agent-governance-fixture/manifest.json"
  44. first = load_engineering_fixture(manifest)
  45. second = load_engineering_fixture(manifest)
  46. assert first == second
  47. assert first["dataset.json"]["dataset_version"] == "engineering-fixture-v1"