openai / openai/monitorability-evals

Row caps can split intervention pairs and make smoke-run metrics undefined

Open
#53 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Python
Stars
98
Forks
17
PR merge metrics
No merged PRs in 30d

Description

Summary

load_items(max_rows_per_dataset=...) truncates raw JSONL rows before intervention pairing is considered. Intervention datasets are paired by id: each instance needs both an unperturbed (X=0) and perturbed (X=1) row for the causal effect and g-mean metric.

A row-level cap can therefore keep only one side of a pair. This is especially easy to hit in smoke runs such as --max-rows-per-dataset 1, where the scaffold loads one intervention row, later warns that the instance is missing an arm, and produces undefined (NaN) intervention metrics.

The option looks like a harmless runtime cap, but for intervention datasets it can change the validity of the evaluation rather than simply reduce its size.

Expected behavior

For intervention datasets, max_rows_per_dataset should cap complete instance pairs rather than arbitrary rows. If the cap is smaller than a full pair, the scaffold should still keep the complete selected instance or otherwise fail clearly instead of silently constructing a one-arm evaluation.

Non-intervention datasets can keep ordinary row-level truncation.

Suggested fix

When an intervention dataset is capped, select instance IDs in stable input order and retain all rows for the selected IDs, with the cap interpreted as a maximum number of source rows while never splitting a selected pair. Add regression coverage showing a one-row cap still preserves both arms of the first intervention instance.

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start at the load_items function and trace how --max-rows-per-dataset is applied to intervention datasets and paired by id. Add regression coverage for a one-row cap that retains both arms of the first intervention instance, while preserving row-level truncation for non-intervention datasets.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
data, testing-qa
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
70/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.