The scripts are in the repository, not in the installed package. Clone it,
then
cd recipes/01-simulate/smol-data-envs before running the commands below. Browse this recipe on GitHub.None, not 0; a shell echo earns nothing),
and how the graded rows become GRPO groups. You need nothing for the offline
run; the live run needs any model the SDK can call. Seconds offline, about a
minute live on 24 tasks.
Run it
pandas and pyarrow in the same interpreter (the
programs import pandas; a few tasks read HDF5 and need h5py). It downloads
the split and each task’s tables from Hugging Face into raw/, public and
with no token, once.
The environment
- The reward (
DataEnvRewardin env.py) is aVerifier: 1 when the printed answer matches under the dataset’s grader, 0 when it does not, when the program crashed, or when the reply was a shell block. - Ungraded is not wrong. A table that failed to download raises
VerifierError, the row getsreward=None,pass_atskips it andwai.selectdrops it. Scoring it 0 would teach the policy that correct programs fail on an unlucky network. - Tolerances are the task’s. Integer answers carry
atol=0; decimals carry their ownatol/rtol(for example 0.05 and 1%). The grader (grader.py, vendored at the dataset’s revision, MIT) tries exact, numeric, list, then Math-Verify. - The gold stays out of training files. It rides in
privileged.reference, which the training export never projects, and a reason that would quote it prints<reference>instead. - Isolation. Programs run in a fresh temp directory, a subprocess with a 60 s timeout. That stops runaway loops; it is not a security boundary. Run a policy you do not trust in a container or a sandbox service.
What you get
Offline, four fixture tasks walk every branch: right, right within the tolerance (5768 against 5768.04), wrong value, crashed, shell, all-pass
(no gradient), and ungraded.
Live, Claude Haiku 4.5 on the first 24 eval tasks, k=4, one reply per
rollout (2026-09-25):
KeyError: the program guesses a column name it never
looked at. Only 6 of the 24 tasks split between right and wrong, which is
where GRPO has something to learn; select also warns that 4 rollouts per
task place a task in the 20-80% band only to about 0.3, so train with
--k 16.
Next
- Give the policy a look before it answers: a multi-turn agent with a code
tool fixes most
KeyErrorcrashes. Wrap it with thebring-your-own-agentcontract and pass it as--agent. - Measure whether the number means anything:
is-your-eval-any-good. - Train on the split groups:
04-train/grpo.
References
- Adithya S K. SmolDataEnvs: verified data-analysis environments from
Kaggle notebooks. Hugging Face dataset
FineEnvs/SmolDataEnvs, 2026. Release notes: FineEnvs PR #14. - Lambert et al. Tülu 3: pushing frontiers in open language model post-training (RLVR). arXiv:2411.15124.