Skip to content

Commit c2b8e8d

Browse files
committed
refactor(data): consume the shared dataset registry in the regen script
The response-regeneration script kept its own plain-dict DATASET_CONFIGS (magpie/ultrachat/gsm8k) alongside the DatasetConfig registry in speculators.data_generation.configs, so adding a dataset meant two edits in two formats. Since #716 the script imports speculators.data_generation.vllm_client anyway, so consuming the shared registry adds no import weight. DatasetConfig gains an optional prompt_field — the bare-prompt fallback column used when a row carries no conversation — and presets defining it are the script's --dataset choices, which stay exactly magpie/ultrachat/gsm8k with unchanged HF paths, splits, and subsets. Dataset-registry half of RFC #702. Signed-off-by: Ranran Haoran Zhang <ranzhang@redhat.com>
1 parent 6030a44 commit c2b8e8d

3 files changed

Lines changed: 33 additions & 23 deletions

File tree

scripts/response_regeneration/script.py

Lines changed: 10 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -12,30 +12,17 @@
1212
from datasets import load_dataset
1313
from tqdm import tqdm
1414

15+
from speculators.data_generation.configs import DATASET_CONFIGS
1516
from speculators.data_generation.vllm_client import (
1617
DEFAULT_MAX_RETRIES,
1718
InvalidResponseError,
1819
with_retries,
1920
)
2021

21-
DATASET_CONFIGS = {
22-
"magpie": {
23-
"id": "Magpie-Align/Magpie-Llama-3.1-Pro-300K-Filtered",
24-
"prompt_field": "instruction",
25-
"default_split": "train",
26-
},
27-
"ultrachat": {
28-
"id": "HuggingFaceH4/ultrachat_200k",
29-
"prompt_field": "prompt",
30-
"default_split": "train_sft",
31-
},
32-
"gsm8k": {
33-
"id": "openai/gsm8k",
34-
"prompt_field": "question",
35-
"default_split": "train",
36-
"subset": "main",
37-
},
38-
}
22+
# Presets usable for regeneration: those defining a bare-prompt fallback column.
23+
REGEN_DATASETS = [
24+
name for name, config in DATASET_CONFIGS.items() if config.prompt_field
25+
]
3926

4027

4128
def parse_args():
@@ -56,7 +43,7 @@ def parse_args():
5643
parser.add_argument(
5744
"--dataset",
5845
default="ultrachat",
59-
choices=list(DATASET_CONFIGS.keys()),
46+
choices=REGEN_DATASETS,
6047
help="Dataset to process",
6148
)
6249
parser.add_argument(
@@ -424,12 +411,12 @@ async def main():
424411

425412
# Get dataset configuration
426413
dataset_config = DATASET_CONFIGS[args.dataset]
427-
dataset_id = dataset_config["id"]
428-
prompt_field = dataset_config["prompt_field"]
414+
dataset_id = dataset_config.hf_path
415+
prompt_field = dataset_config.prompt_field
429416

430417
# Use dataset-specific defaults if not provided
431-
split = args.split if args.split is not None else dataset_config["default_split"]
432-
subset = args.subset if args.subset is not None else dataset_config.get("subset")
418+
split = args.split if args.split is not None else dataset_config.split
419+
subset = args.subset if args.subset is not None else dataset_config.subset
433420

434421
# Generate output filename if not specified
435422
if args.outfile is None:

src/speculators/data_generation/configs.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ class DatasetConfig:
2020
split: str
2121
filter_fn: Callable[[dict], bool] | None = None
2222
normalize_fn: Callable[[dict], dict] | None = None
23+
# Bare user-prompt column; presets defining it are regen --dataset choices.
24+
prompt_field: str | None = None
2325

2426

2527
def _normalize_ultrachat(example: dict) -> dict:
@@ -112,18 +114,21 @@ def _normalize_sharegpt4v_coco(example: dict) -> dict:
112114
hf_path="HuggingFaceH4/ultrachat_200k",
113115
split="train_sft",
114116
normalize_fn=_normalize_ultrachat,
117+
prompt_field="prompt",
115118
),
116119
"gsm8k": DatasetConfig(
117120
name="gsm8k",
118121
hf_path="openai/gsm8k",
119122
subset="main",
120123
split="train",
121124
normalize_fn=_normalize_gsm8k,
125+
prompt_field="question",
122126
),
123127
"magpie": DatasetConfig(
124128
name="magpie",
125129
hf_path="Magpie-Align/Magpie-Llama-3.1-Pro-300K-Filtered",
126130
split="train",
131+
prompt_field="instruction",
127132
),
128133
"nemotron": DatasetConfig(
129134
name="nemotron",

tests/unit/scripts/test_response_regeneration.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import pytest
1616

1717
from speculators.data_generation import vllm_client
18+
from speculators.data_generation.configs import DATASET_CONFIGS
1819
from speculators.data_generation.preprocessing import _preprocess_batch
1920
from speculators.data_generation.vllm_client import InvalidResponseError
2021

@@ -527,3 +528,20 @@ def test_worker_row_identity_and_all_or_nothing_writes(tmp_path):
527528
error = json.loads(err_path.read_text())
528529
assert error["id"] == "conv-abc"
529530
assert error["metadata"]["turns_completed"] == 1
531+
532+
533+
# ---------------------------------------------------------------------------
534+
# 6. Dataset presets come from the shared registry.
535+
# ---------------------------------------------------------------------------
536+
537+
538+
def test_regen_presets_come_from_shared_registry():
539+
# Identity, not equality: a re-declared copy in the script would drift.
540+
assert regen.DATASET_CONFIGS is DATASET_CONFIGS
541+
# The original CLI presets stay regen-eligible, with their fallback columns.
542+
eligible = {
543+
name: DATASET_CONFIGS[name].prompt_field for name in regen.REGEN_DATASETS
544+
}
545+
assert eligible["magpie"] == "instruction"
546+
assert eligible["ultrachat"] == "prompt"
547+
assert eligible["gsm8k"] == "question"

0 commit comments

Comments
 (0)