| from __future__ import annotations |
|
|
| from pathlib import Path |
|
|
| from dovla_cil.data.sharding import iter_cil_records |
| from dovla_cil.generation.pipeline import generate_builtin_toy_dataset, generate_cil_dataset |
| from dovla_cil.tasks.library import built_in_toy_tasks |
| from dovla_cil.utils.io import iter_jsonl, read_json |
|
|
|
|
| def test_toy_generation_pipeline_writes_shards_and_group_index(tmp_path: Path) -> None: |
| summary = generate_cil_dataset( |
| backend="toy", |
| tasks=built_in_toy_tasks()[:2], |
| out_dir=tmp_path, |
| num_states_per_task=1, |
| k=4, |
| seed=11, |
| shard_size=4, |
| inline_observations=True, |
| ) |
|
|
| manifest = read_json(tmp_path / "manifest.json") |
| group_index = list(iter_jsonl(tmp_path / "group_index.jsonl")) |
| records = [] |
| for shard in manifest["shards"]: |
| records.extend(iter_cil_records(tmp_path / str(shard["path"]))) |
|
|
| assert summary.num_groups == 2 |
| assert summary.num_records == 8 |
| assert manifest["record_count"] == 8 |
| assert manifest["group_count"] == 2 |
| assert manifest["group_index_path"] == "group_index.jsonl" |
| assert len(group_index) == 2 |
| assert all(entry["num_records"] == 4 for entry in group_index) |
| assert all(record.rank_within_group is not None for record in records) |
| assert all(record.regret is not None for record in records) |
| assert any(record.reward.terminal_success for record in records) |
| assert "expert" in summary.candidate_type_distribution |
|
|
|
|
| def test_builtin_group_shortcut_does_not_cap_at_library_size(tmp_path: Path) -> None: |
| summary = generate_builtin_toy_dataset( |
| out_dir=tmp_path, |
| groups=12, |
| k=2, |
| seed=17, |
| shard_size=64, |
| ) |
|
|
| assert summary.num_groups == 12 |
| assert summary.num_records == 24 |
|
|