{"data":{"kind":"file","path":"README.md","version_id":"xf0msw3jj465ce8jnuf45qmo","entry":{"name":"README.md","path":"README.md","is_directory":false,"size":1675,"modified_at":"2026-06-16T19:38:18.611000","content_hash":"05f4266ef7110812bcdb5b63b85386430cec51d17217611afce6f04aa2c98ea2"},"entries":[],"content":"# staros-constraint-gym\n\nA Prime Intellect `verifiers` environment whose reward is a **deterministic\nprogrammatic verifier**, not an LLM judge. Pure-CPU, exact, reproducible, free to\nrun at any scale.\n\n## Flagship: the lipogram\n\nGenerate a poem that **never uses a forbidden letter** (default `\"e\"`). The reward\n(`lipogram_reward`) keeps the exact character-level constraint as the dominant\nterm, folds in an anti-repetition surface score, and **gates degenerate outputs**\n(too short / too few lines) so the constraint can't be satisfied by an e-less\nfragment. Frontier models routinely fail it — stray \"e\"s slip through — which\nmakes it a clean target for verifier-rewarded RL.\n\n```python\nimport verifiers as vf\nfrom staros_constraint_gym import load_environment\n\nenv = load_environment(task=\"lipogram\")            # hardened lipogram flagship\n# env = load_environment(task=\"general\", forms=[\"haiku\", \"sonnet_shakespearean\"])\n```\n\n- **Reward**: composite in `[0, 1]` (lipogram constraint 0.8 + surface 0.2, degeneracy-gated).\n- **Held-out eval**: `load_environment(task=\"lipogram\", holdout=True)` — disjoint topic slice.\n- **Per-dimension metrics** are logged at weight 0 (`score/lipogram`, `score/surface`, `accepted`, `n_lines`, `n_alpha`).\n\n## General constraint gym\n\n`task=\"general\"` exposes all forms — `haiku`, `limerick`, `sonnet_shakespearean`,\n`villanelle`, `acrostic`, `lipogram`, `univocalic`, `palindrome`, `snowball` — each\ngraded by the deterministic meter/rhyme/form/Oulipo verifiers.\n\n## Reproducibility\n\nScores are pinned to `cmudict==1.1.3` / `pronouncing==0.3.0`; identical text →\nidentical score, cross-machine. Re-run the verifier yourself.\n","encoding":"utf-8","truncated":false,"total_bytes":1675},"status":null}