Counterfactual Action Atlas / CILBench Format
CILBench stores same-state do-action alternatives. A CILBenchGroup is a local
action chart: the simulator state, observation, and instruction are held fixed,
then multiple action branches are executed from that identical state.
Core group fields:
group_idtask_idsplit_idsimulator_namesimulator_state_hashrandom_seedinstructionobservation_reforobservation_inlinescene_metadataanchor_policybranchesmetadata
Each branch stores:
branch_idactionaction_representationbranch_familyoutcomerollout_trace_reforrollout_trace_inlinetrain_onlymetadata
The outcome vector is:
[success, progress, contact_quality, safety_violation,
task_stage_quality, smoothness, recovery]
The scalar utility used for ranking is a view over this vector. Reports should publish the components separately, then use the scalar only for training, ranking, CAR, and oracle computations.
Benchmark tracks:
- Ranking: choose among measured branches without seeing outcomes.
- Generation: propose new action tangents from the same observation and instruction.
- Deployment: execute deployment-clean proposals without same-state validation rewards.
- Recovery: evaluate near-miss states and safety/abstention behavior.
Canonical branch families:
anchor/base_policyexpert_train_onlyresidual_transportobject_centric_geometricrecovery_tangentnegative_antigoallearned_generator
Generator baselines:
- V0 transported residual retrieval copies train-state tangents into the current state and lets the learned utility field select among them.
- V1 utility-weighted residual retrieval changes proposal support before
selection by weighting train tangents with retrieval affinity and measured
source advantage,
exp(-distance / tau + rho * delta_utility). - The full CIL-Atlas generator should learn positive causal tangent support directly, with V0/V1 kept as diagnostic baselines rather than the main novelty.
Learned generator targets:
scripts/export_positive_tangent_targets.pyexportsdelta_action = action - basefor each same-state group.- The base priority is deployment-clean (
policy,policy_residual,anchor,base) withexpertas a final fallback for current train-only CIL shards. - Labels are measured from same-state utility contrast:
positiveifU(action) > U(base) + epsilon,negativeif below the base byepsilon, andneutralotherwise. - Each target includes a low-dimensional
tangent_summary.spline_codewith endpoint, midpoint, gripper, lift, and approach-axis summaries. This is the first training artifact for V2/V3 CVAE or flow-matching generators in object-centric spline tangent space. scripts/eval_positive_tangent_memory.pyis a leakage-checked diagnostic baseline: train-only positive tangents become diverse task-level prototypes, and heldout groups report PTR proxy, negative-near rate, and whether the nearest proposal is closer to a hidden positive than to hidden negatives. It should be reported as support evidence, not as the final learned generator.scripts/eval_positive_tangent_local_atlas.pyevaluates local chart-neighborhood reuse: for each heldout chart it retrieves train-only positive tangents from nearby observation-language-task charts. This is not the final generator, but it tests whether positive support is locally organized in the atlas. It can also score candidates by distance from local train negatives, which is a diagnostic for whether negative boundaries alone can replace local positive support. Current K16 support-proxy results say no: pool16 local positives reach 23.66% PTR at RMS<=0.20 and 52.69% at RMS<=0.40, while pool64 negative-margin reranking keeps or lowers strict PTR and does not reduce the 5.33% strict negative-near rate.scripts/eval_positive_tangent_chart_synthesis.pyis the next local-chart diagnostic. It keeps train-only positive chart atoms and adds barycentric means over nearby chart neighborhoods, testing whether positive support is better expressed as local chart coordinates than as raw prototype replay. Current best keeps 15 direct local atoms plus one 16-neighbor chart mean, preserving K16 PTR at 23.66% / 52.69% and strict negative-near at 5.33% while improving positives-closer-than-negatives to 65.33%. This remains an offline support proxy; successful settings should motivate the learned object-centric atlas generator rather than become the final deployment method by themselves.scripts/train_positive_tangent_cvae.pytrains a first raw-action CVAE over train-only positive tangents. The companionscripts/summarize_positive_tangent_cvae_sweep.pyranks temperature/beta sweeps by heldout PTR and negative-near rates. This baseline is useful for falsifying raw action-chunk likelihood as the final geometry.scripts/train_positive_tangent_spline_cvae.pytrains a keyframe-spline CVAE over start/midpoint/endpoint residual codes and decodes samples back into full action chunks before evaluation. This is the first chart-geometry baseline and a bridge toward object-centric flow matching.scripts/train_positive_tangent_spline_flow.pytrains conditional flow matching in the same keyframe tangent space. Current results should be read as a falsification of unguided density flow: useful as a stepping stone, but not the final utility-guided atlas generator.scripts/train_positive_tangent_guided_spline_flow.pyadds the missing contrastive part: a train-only positive-vs-negative utility head guides the same spline flow during sampling. This tests whether the atlas should be a learned local causal utility field over tangent geometry, not just a density model over positive examples.
JSONL shards should preserve complete groups. A group may exceed the target shard size, but it should never be split across shards unless an explicit future streaming mode opts into that tradeoff.