Skip to content

v0.10.0-beta — Unified Benchmarks Architecture

Pre-release
Pre-release

Choose a tag to compare

@joslat joslat released this 17 May 21:02
· 214 commits to main since this release
201a92c

Implements ADR-017 — promotes compliance benchmarks out of samples/, relocates PerformanceBenchmark, adds OWASP/MITRE/LongMemEval façades, all under the canonical AgentEval.Benchmarks namespace. Introduces BenchmarkFamilyRegistry as the single source of truth for benchmark family discovery, wired into a new CLI surface (bench --list, bench perf, dynamic per-family --help).

Eleven phases (0 through 10.5) shipped over 14 commits with an Opus gate-review at every phase boundary and a final completeness audit. All 9 yellow items raised during phase reviews closed; ADR-017 four canonical conventions met and pinned by contract tests.

Highlights

  • BenchmarkFamilyRegistry (ADR-017 Convention 3) — canonical, thread-safe, two registration shapes (CompositeEval-native + external-dataset). 8 families auto-register via [ModuleInitializer].
  • CLI: bench --list (registry-sourced, not hardcoded), bench perf {latency,throughput,cost} (previously CLI-less), bench {family} --help enumerates presets dynamically.
  • New façades under AgentEval.Benchmarks: OwaspBenchmark (4 presets, 10-leaf composite with honest skipped leaves), MitreBenchmark (3 ATLAS presets, 12-leaf), LongMemEvalBenchmark (Shape-B external-dataset).
  • Convention 2 (EvaluateAsync(EvalInput) → EvalResult adapter) — canonical homogenisation primitive; round-trip through EvalResultPersistence tested for OWASP, MITRE, and Performance.
  • Compliance namespace cleanup — AgentEval.GdprBenchmark.* → AgentEval.Compliance.Gdpr.* (and EuAiAct equivalent) — eliminates the parent-namespace-vs-type-name CS0234 collision class at root.
  • OwaspBenchmark.Top10ForRag refocused — was label-only divergence from Top10; now genuinely distinct (Comprehensive intensity, 20-min timeout, RAG threat-model documented).
  • LongMemEvalBenchmark.Full() now throws when LONGMEMEVAL_DATASET_PATH unset (was: silently degraded to embedded subset — a real footgun).
  • 3718 main + 477 Memory tests pass; build clean with GenerateDocumentationFile=true; .nupkg size 5.1 MB (under 10 MB tripwire).

Breaking changes

  1. Internal compliance namespaces renamed — AgentEval.GdprBenchmark.* → AgentEval.Compliance.Gdpr.* (same for EuAiAct). Public preset-factory entry points unchanged. Migration: update using directives reaching internal types.
  2. PerformanceBenchmark relocated to AgentEval.Evals.Performance.dll. Umbrella NuGet consumers see no change; direct internal-DLL consumers need to add a reference.
  3. LongMemEvalBenchmark.Full() now throws when LONGMEMEVAL_DATASET_PATH is unset (previously silently degraded to embedded subset). Use Subset() for the embedded sample.
  4. OwaspBenchmark.Top10ForRag() cost-tier shifted Medium → High (Comprehensive intensity vs Quick). No API signature change; programmatic callers see slower runs but materially deeper probe coverage.

ADR-017 conventions — all four canonical and pinned

  • Convention 1 (top-level factory namespace = AgentEval.Benchmarks) — enforced by BenchmarkNamespaceContractTests reflection enumerator.
  • Convention 2 (EvaluateAsync(EvalInput) → EvalResult adapter) — round-trip integrity tests on OWASP, MITRE, Performance.
  • Convention 3 (BenchmarkFamilyRegistry canonical) — extensibility test proves the registry is genuinely plug-in surface (synthetic family registered at runtime appears in bench --list).
  • Convention 4 (Opus gate-review after every phase) — 10 review docs cover phases 4 through 10.5 + final audit.

Phase index

Phase What
1 Promote GDPR samples → src/AgentEval.Compliance.Gdpr
2 Promote EU AI Act samples → src/AgentEval.Compliance.EuAiAct
3 Relocate PerformanceBenchmark + EvaluateAsync adapter
4 Lift benchmark factories to AgentEval.Benchmarks namespace
4b Compliance internal namespace rename (close CS0234 at root)
5 OwaspBenchmark façade + reflection contract enumerator
5b Top10ForRag honesty closeout
6 MitreBenchmark façade + ATLAS technique mapping
7 LongMemEvalBenchmark façade (Shape B)
8 BenchmarkFamilyRegistry canonical + CLI bench --list/perf/family-help
9 CHANGELOG + ADR-017 revision 3 + docs/architecture.md
10.5 Fix report-writer timestamp race (test infra)
10 audit Version bump 0.10.0-beta + 4 audit-discovered gap closures

Install

```xml
<PackageReference Include="AgentEval" Version="0.10.0-beta" />
```

Known issues — deferred to v0.10.1+

Honestly tracked in CHANGELOG [Unreleased]:

  • Pre-existing LLM-non-determinism flake on SafetyPolicyTests.CancellationRequest_ShouldConfirmBeforeCancelling (9/10 over 10 runs; passes in isolation; not introduced by this release).
  • Missing docs/redteam/owasp.md (referenced from OwaspBenchmarkRegistration.docLinkUrl).
  • README.md benchmark table + docs/benchmarks.md sweep.
  • Agentic-safety + GDPR/EuAiAct domain-pack registry surface flags.

See CHANGELOG.md for full v0.10.0-beta entries and ADR-017 for the architecture.