Spaces:
Sleeping
Sleeping
| ## Dataset Generation Pipeline | |
| This repository includes a unified pipeline for generating ASCII puzzle datasets for training and evaluation. The pipeline generates puzzles, creates DataFrames with train/test splits, and can optionally upload to HuggingFace Hub. | |
| ### Quick Start | |
| ```bash | |
| # Generate 100 samples of bridges puzzle (5x5, easy difficulty) | |
| python run_ascii_puzzle_generation_pipeline.py --puzzles "bridges:5x5de" --n_samples 100 | |
| # Generate multiple puzzle configurations | |
| python run_ascii_puzzle_generation_pipeline.py --puzzles "bridges:5x5de,bridges:7x7dm,loopy:5x5de" --n_samples 500 | |
| # Generate with a custom suffix and upload to HuggingFace | |
| python run_ascii_puzzle_generation_pipeline.py --puzzles "bridges:5x5de" --suffix "grpo_train" --n_samples 1000 | |
| ``` | |
| ### Puzzle Configuration Format | |
| Puzzles are specified using the format `puzzle_name:size_difficulty`: | |
| | Component | Description | Examples | | |
| |-----------|-------------|----------| | |
| | `puzzle_name` | Name of the puzzle type | `bridges`, `galaxies`, `loopy`, `pattern`, `undead` | | |
| | `size` | Grid dimensions | `5x5`, `7x7`, `10x10` | | |
| | `difficulty` | Difficulty level suffix | `de` (easy), `dm` (medium), `dh` (hard) | | |
| **Examples:** | |
| - `bridges:5x5de` - 5x5 bridges puzzle, easy difficulty | |
| - `galaxies:7x7dm` - 7x7 galaxies puzzle, medium difficulty | |
| - `loopy:10x10dh` - 10x10 loopy puzzle, hard difficulty | |
| ### Available Puzzle Types and Difficulty Mappings | |
| | Puzzle | Easy | Medium | Hard | Notes | | |
| |--------|------|--------|------|-------| | |
| | `bridges` | `d0` | `d1` | `d2` | Numeric difficulty | | |
| | `galaxies` | `dn` (normal) | `du` (unreasonable) | `du` | Only 2 difficulty levels | | |
| | `loopy` | `de` | `dt` (tricky) | `dh` | Uses square grid (`t0`) | | |
| | `pattern` | N/A | N/A | N/A | No difficulty parameter | | |
| | `undead` | `de` | `dn` (normal) | `dt` (tricky) | Grid sizes: 4x4, 5x5, 7x7 | | |
| ### Pipeline Arguments | |
| ```bash | |
| python run_ascii_puzzle_generation_pipeline.py [OPTIONS] | |
| ``` | |
| | Argument | Description | Default | | |
| |----------|-------------|---------| | |
| | `--puzzles` | Comma-separated puzzle configs (required) | - | | |
| | `--n_samples` | Number of samples per config | 1000 | | |
| | `--n_workers` | Parallel workers for generation | 4 | | |
| | `--output_dir` | Base output directory | `./pipeline_output` | | |
| | `--suffix` | Suffix for dataset names | None | | |
| | `--test_only` | Put all samples in test split | False | | |
| | `--dedupe_test200` | Dedupe train against test200 datasets | False | | |
| | `--skip_generation` | Skip puzzle generation step | False | | |
| | `--skip_df` | Skip DataFrame creation step | False | | |
| | `--skip_upload` | Skip HuggingFace upload step | False | | |
| | `--run_folder` | Use existing run folder | None | | |
| | `--hf_token` | HuggingFace authentication token | None | | |
| | `--commit_message` | Commit message for HuggingFace | None | | |
| ### Output Structure | |
| Each puzzle configuration gets its own timestamped folder: | |
| ``` | |
| pipeline_output/ | |
| ├── bridges_5x5de_grpo_train_20251217_143052/ | |
| │ ├── txt/ # Generated puzzle files | |
| │ │ ├── bridges_5x5de_abc123.txt | |
| │ │ └── ... | |
| │ └── csvs/ # CSV with train/test splits | |
| │ └── bridges_5x5de_grpo_train_20251217_143052.csv | |
| └── ... | |
| ``` | |
| ### Common Use Cases | |
| **Generate a test dataset (all samples in test split):** | |
| ```bash | |
| python run_ascii_puzzle_generation_pipeline.py \ | |
| --puzzles "bridges:5x5de,bridges:7x7dm,bridges:10x10dh" \ | |
| --n_samples 200 \ | |
| --suffix "test200" \ | |
| --test_only | |
| ``` | |
| **Generate training data with deduplication:** | |
| ```bash | |
| python run_ascii_puzzle_generation_pipeline.py \ | |
| --puzzles "bridges:5x5de" \ | |
| --n_samples 5000 \ | |
| --suffix "grpo_5k" \ | |
| --dedupe_test200 \ | |
| --n_workers 16 | |
| ``` | |
| **Reuse existing puzzles (skip generation):** | |
| ```bash | |
| python run_ascii_puzzle_generation_pipeline.py \ | |
| --puzzles "bridges:5x5de" \ | |
| --skip_generation \ | |
| --run_folder ./pipeline_output/bridges_5x5de_grpo_train_20251217_143052 | |
| ``` | |
| ### Pre-built Generation Scripts | |
| The `scripts/` directory contains ready-to-use bash scripts for common dataset generation tasks: | |
| | Script | Description | | |
| |--------|-------------| | |
| | `generate_all_rsft_1k.sh` | Generate all rsft_1k datasets (15k total) | | |
| | `generate_bridges_rsft_1k.sh` | Bridges rsft_1k (3k samples) | | |
| | `generate_bridges_grpo_5k.sh` | Bridges grpo_5k (30k samples) | | |
| | `generate_*_test200.sh` | Test datasets (200 samples each) | | |
| **Usage:** | |
| ```bash | |
| # Generate only (no upload) | |
| ./scripts/generate_bridges_rsft_1k.sh | |
| # Generate and upload to HuggingFace | |
| ./scripts/generate_bridges_rsft_1k.sh --upload | |
| ``` | |
| ### Generated Puzzle File Format | |
| Each generated `.txt` file contains: | |
| ``` | |
| Solved: True | |
| Problem: | |
| [ASCII representation of the initial puzzle state] | |
| After move M1,0,3: | |
| [ASCII state after move 1] | |
| After move M2,1,4: | |
| [ASCII state after move 2] | |
| ... | |
| Final Solution: | |
| [ASCII representation of the solved puzzle] | |
| ``` | |
| ## License | |
| The `RLP` code is released under the CC BY-NC 4.0 license. For more information, see [LICENSE](LICENSE). | |
| Simon Tatham's Portable Puzzle Collection is licensed under the MIT License, see [puzzles/LICENCE](puzzles/LICENCE). | |