license: cc-by-4.0
language:
- en
task_categories: - text-generation
tags: - instruction-following
- structured-outputs
- abstention
- rlvr
- nemo-gym
- grpo
- lfm2
- lfm2.5
- prompts
size_categories: - 10K<n<100K
source_datasets: - five nvidia/Nemotron-RL-* NeMo-Gym datasets
configs: - config_name: default
data_files:- split: structured_outputs_direct
path: data/structured_outputs_direct-*.parquet - split: structured_outputs_diversified
path: data/structured_outputs_diversified-*.parquet - split: structured_outputs_tool_extraction
path: data/structured_outputs_tool_extraction-*.parquet - split: free_form_formatting
path: data/free_form_formatting-*.parquet - split: citation_formatting
path: data/citation_formatting-*.parquet - split: calendar
path: data/calendar-*.parquet - split: qa_abstention
path: data/qa_abstention-*.parquet
- split: structured_outputs_direct
Nemotron-RL instruction-following & abstention Gym tasks → LFM2.5 prompt format
Verifiers are NVIDIA NeMo-Gym rule checkers, not IFEval. Each row keeps the full verifier metadata in
extra(verifierregex/string-match specs,schema_str/schema_type,exp_cal_state,answer) so the checks can be re-implemented or run through NeMo Gym's resources servers.qa_abstentionrows carry a per-rowlicenseof CC BY-SA 4.0 from the source.
A derivative of [five nvidia/Nemotron-RL-* NeMo-Gym datasets](https://huggingface.co/datasets/five nvidia/Nemotron-RL-* NeMo-Gym datasets) (cc-by-4.0)
normalized for fine-tuning Liquid AI LFM2 / LFM2.5 models, whose native tool-call format is Pythonic:
<|im_start|>assistant
<|tool_call_start|>[get_weather(location='Paris, France', unit='celsius')]<|tool_call_end|><|im_end|>
Prompt-only rows (prompt_only = true) from five rule-verified NVIDIA RL datasets, one split each: structured_outputs_direct (JSON/XML/YAML/TOML schema-conformant generation), structured_outputs_diversified (document → schema extraction, multi-step), structured_outputs_tool_extraction (extraction through a tool call — tools attached, answer must be a Pythonic call to the right response_tool_N among distractors), free_form_formatting (regex-verified layouts), citation_formatting ([ref:N] markers), calendar (multi-turn scheduling with expected calendar state), qa_abstention (answer or abstain; target answer in extra). Rows whose prompt exceeds 8,192 tokens are dropped (the serving context for our LFM2.5 deployment is 10,240): this removes roughly half of structured_outputs_tool_extraction and a fifth of structured_outputs_diversified (long source documents plus many distractor tools).
Every row was rendered through the official LiquidAI/LFM2.5-VL-3B chat template (identical to the LFM2.5
text models' template for text-only input); prompt-only rows carry no tool calls, so no round-trip check applies.
What changed vs. the source
| Transform | Why |
|---|---|
responses_create_params.input → messages, .tools (flat Responses-API tools, parameters JSON string) → OpenAI tool schemas; rendered with add_generation_prompt=True |
LFM renders tools as List of tools: [...]; policy answers with a Pythonic call. |
All other top-level fields → extra (verifier specs, schemas, expected states, answers) |
Nothing about the reward is lost. |
Tool names sanitized to Python identifiers (web-search → web_search), consistently in tools and calls; originals kept in renamed_tools |
Pythonic call syntax requires identifiers. |
| Exact-duplicate tool entries deduplicated | Template hygiene. |
Dropped: calls to undeclared tools, unparseable arguments, argument names that are not identifiers or are Python keywords (from, class), rows over 8192 tokens, rows with no assistant tokens |
Training hygiene. |
Nothing was rephrased, re-generated, or re-labelled.
Columns
| Column | Type | Description |
|---|---|---|
id, source, split, license |
str | provenance |
messages |
str (JSON) | canonical OpenAI-style messages; tool_calls arguments are dicts. Feed this + tools to apply_chat_template to re-render with any LFM template version. |
tools |
str (JSON) | OpenAI-style tool schemas |
text |
str | fully rendered LFM2.5 conversation, BOS included |
prompt_only |
bool | true when the row is a prompt ending in the generation prompt (no assistant tokens) |
n_turns, n_tool_calls, n_tools, n_tokens, n_assistant_tokens |
int | sizes (LFM2.5 tokenizer) |
renamed_tools |
str (JSON) | {original: sanitized} when any tool was renamed, else "" |
extra |
str (JSON) | source-specific fields: verifier, schema_str, schema_type, problem_type, exp_cal_state, question, answer, domain, agent, tool_choice, parallel_tool_calls (per split) |
Stats
| Split | Read | Kept | Rows with renamed tools | Dropped (reason=count) |
|---|---|---|---|---|
structured_outputs_direct |
28,145 | 28,145 | 0 | |
structured_outputs_diversified |
25,768 | 22,581 | 0 | too_long=3,187 |
structured_outputs_tool_extraction |
8,783 | 4,534 | 0 | too_long=4,249 |
free_form_formatting |
9,037 | 9,036 | 0 | too_long=1 |
citation_formatting |
9,540 | 9,540 | 0 | |
calendar |
9,659 | 9,628 | 0 | too_long=31 |
qa_abstention |
3,150 | 3,150 | 0 |
Training notes
- Use assistant-only loss:
apply_chat_template(messages, tools=tools, tokenize=True, return_assistant_tokens_mask=True). - Prefer re-rendering from
messages/toolsover training ontextif your template differs. - Serving-side parsers must accept JSON literals (
true,null, nested{}/[]) inside Pythonic calls.
Citation
Please cite the upstream dataset: https://huggingface.co/datasets/five nvidia/Nemotron-RL-* NeMo-Gym datasets