You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Add a reproducible train/eval split helper for post-training exports: deterministically partition records into train and held-out eval sets so that no conversation/session leaks across the boundary, and the same split reproduces on re-run.
Follow-up to #96 (curate + export); related to the eval-set construction in #98.
Motivation
#96 covers reproducible export cuts (version pinning + manifest) but not splitting a cut into train vs. eval. Naive row-level random splits leak: turns from the same session land on both sides, inflating eval scores. Splitting must be at a grouping boundary (session/run/user) and deterministic for reproducibility.
Proposed work
A split helper on the export path (e.g. export_training(..., split={"eval_fraction": 0.1, "by": "session_id", "seed": 42})) that:
assigns each group (default session_id, configurable to run_id / tenant / external-id prefix) to train or eval by a stable hash of the group key + seed — so no group spans both sides and the split is reproducible;
writes train and eval as separate outputs, each with its own manifest noting the split params (fraction, group key, seed) and the complementary set's id.
Summary
Add a reproducible train/eval split helper for post-training exports: deterministically partition records into train and held-out eval sets so that no conversation/session leaks across the boundary, and the same split reproduces on re-run.
Follow-up to #96 (curate + export); related to the eval-set construction in #98.
Motivation
#96 covers reproducible export cuts (version pinning + manifest) but not splitting a cut into train vs. eval. Naive row-level random splits leak: turns from the same session land on both sides, inflating eval scores. Splitting must be at a grouping boundary (session/run/user) and deterministic for reproducibility.
Proposed work
export_training(..., split={"eval_fraction": 0.1, "by": "session_id", "seed": 42})) that:session_id, configurable torun_id/tenant/ external-id prefix) to train or eval by a stable hash of the group key + seed — so no group spans both sides and the split is reproducible;Non-goals
Acceptance criteria
session_id) appears in both train and eval.Notes
Hold until #96 has an implementation to build on. Shares the eval-set format with #98 and composes with #96 decontamination.