Model Evaluation Service  ·  View 11 of 21  ·  Data

Core Data Model

Twelve entities, and the one foreign key that carries the whole architecture.

Editable source SVG draw.io All views
candidate candidate_id PK config_digest UNIQUE model_ref prompt_version tool_defs_version index_version is_incumbent submitted_at frame frame_id PK dataset_version FK scorer_version judge_version harness_version retired_at run run_id PK candidate_id FK frame_id FK suite_id FK state harness_error_rate cost_cents dataset_version dataset_version PK dataset_id class owner example_count published_at example example_id PK dataset_version FK input_ref slice_labels provenance consent_state is_canary tombstoned_at score score_id PK run_id FK example_id FK frame_id FK scorer_id FK value generation_idx trace_ref superseded_by suite suite_id PK dataset_id FK gated_slices repetitions online_correlation scorer scorer_id PK family version rubric_version kappa_vs_human gate_admissible gate gate_id PK suite_id FK slice strength threshold alpha verdict verdict_id PK candidate_id FK frame_id FK outcome baseline_run_id FK decided_at human_label label_id PK example_id FK rater_id preference blinded labelled_at waiver waiver_id PK verdict_id FK gate_id FK approver reason expires_at evaluated by scopes scored as emits labelled by cleared by excused by gated by Model Evaluation Service — Core Data Model frame_id on both run and score is deliberate redundancy: a score must be self-describing even if its run row is lost, because the frame is what makes the number mean anything. Three foreign keys are carried as columns rather than drawn — score.run_id, example.dataset_version and suite.dataset_id — to keep the relations readable. v 1.0 · owner Data & AI Global Practice · date 2026-09

Decisions

  • frame_id appears on both run and score. A score must be self-describing even if its run row is lost, because the frame is what makes the number mean anything.
  • score.superseded_by rather than an update column: a correction is a new fact, never an edit to an old one.
  • example.tombstoned_at makes the erasure path a first-class state rather than a deletion nobody can audit.

Assumptions

  • scorer.kappa_vs_human and scorer.gate_admissible are stored on the scorer, so admissibility is data the gate reads rather than a convention people remember.

Deliberate omission

  • Three foreign keys are carried as columns rather than drawn — score.run_id, example.dataset_version and suite.dataset_id — to keep the relations readable.