FineEnvs/SmolDataEnvs-harbor-eval
📊 SmolDataEnvs: Harbor (eval) 5.5K+ RL tasks for hill-climbing small models in code and data science. A 2B model on these tasks. Left: what it optimises. Right: 144 held-out tasks it never trains on. Two runs over the same 5,000 tasks: shuffled against a curriculum ordered easiest to hardest. The validation suite: 144 tasks, small enough to run every few hundred training steps without the eval becoming the expensive part of the loop. Packaged in Harbor format… See the full description on the dataset page: https://huggingface.co/datasets/FineEnvs/SmolDataEnvs-harbor-eval.
<div align="center">
<img src="https://huggingface.co/datasets/FineEnvs/SmolDataEnvs-harbor-eval/resolve/main/banner.png" alt="SmolDataEnvs" width="100%">
📊 SmolDataEnvs: Harbor (eval)
 
</div>
5.5K+ RL tasks for hill-climbing small models in code and data science.
<div align="center">
<img src="https://huggingface.co/datasets/FineEnvs/SmolDataEnvs-harbor-eval/resolve/main/curves.gif" alt="Reward and held-out pass@k climbing over 1,119 GRPO steps" width="100%">
<sub>A 2B model on these tasks. Left: what it optimises. Right: 144 held-out tasks it never trains on.<br> Two runs over the same 5,000 tasks: <b>shuffled</b> against a <b>curriculum</b> ordered easiest to hardest.</sub>
</div>
The validation suite: 144 tasks, small enough to run every few hundred training steps without the eval becoming the expensive part of the loop.
Packaged in Harbor format, so each task is a ready-made agentic environment: its own container, its own data, its own verifier.
What's inside
- 144 verified tasks: quick validation during a run
- Difficulty: easy 16 · medium 74 · hard 54 (
difficulty_tier, plusdifficulty_level1–5)
How a task is laid out
tasks/<task_id>/
task.toml # metadata, the question, the gold answer, grading tolerances
instruction.md # the prompt the agent sees
environment/ # Dockerfile (shared base image) + the data-pull hook
tests/ # grader.py (deterministic) + test.sh
registry.json # the suite manifest
manifest.parquet # one row per task, for filtering without walking the treeInstall
pip install "openenv[harbor]" # tested with openenv 0.6.0, needs Python 3.12+The [harbor] extra is what brings in the sandboxes. A plain pip install openenv gives you the CLI but nothing to run a task in. --sandbox e2b also needs E2B_API_KEY set.
Serve it
openenv harbor serve \
--dataset FineEnvs/SmolDataEnvs-harbor-eval \
--llm-url http://127.0.0.1:8000/v1 --model <your-model> \
--port 8000 --capture-port 8100Pass several with --dataset a,b and each arrives as its own split, which is how you train against -train and validate against -eval from one server.
One rollout, no trainer
openenv harbor rollout \
--dataset FineEnvs/SmolDataEnvs-harbor-eval \
--llm-url http://127.0.0.1:8000/v1 --model <your-model> \
--harness opencode --sandbox e2b --task-index 0Where it comes from
Built from the jupyter-agent dataset, real data-science notebooks over 471 Kaggle datasets. Every question–answer pair was extracted and then verified: strong agent models had to solve the task in a live sandbox and reproduce the gold answer under deterministic grading. Anything ambiguous or un-checkable was dropped. So every task here is known-solvable and unambiguously gradable.
Verified by a checker, not judged by a model. Grading is an exact comparison against a known answer, through a ladder of checks: exact match → numeric with tolerances → list and percent normalisation → symbolic equivalence. No LLM sits in the reward path, so the signal does not drift when you change the grader's model, because there isn't one.
The family
Citation
@misc{fineenvs,
author = {Kolavi, Adithya S},
title = {FineEnvs: Open Source RL Environments for LLM Agents},
year = {2026},
url = {https://github.com/adithya-s-k/FineEnvs}
}