{"data":{"kind":"file","path":"README.md","version_id":"oueg5e4biekybn4208od2y38","entry":{"name":"README.md","path":"README.md","is_directory":false,"size":1228,"modified_at":"2026-07-18T23:44:07.733000","content_hash":"c2bd056b810be4981129ac5c3bef6ae19491f37b8e610cec656609b03242453d"},"entries":[],"content":"# writing-rewrite\n\nSingle-turn RL environment: rewrite a messy first-draft passage (real drafts\nmined from IteraTeR) into plain English per rules distilled from Zinsser's\n*On Writing Well*.\n\n**Reward** (one verifiers `GroupRewardFunc`):\n\n```\nreward_i = rank_reward_i × preservation_gate_i\n```\n\n- **Clarity rank**: one LLM-judge call sees all G rewrites of the same source\n  and ranks them against the rules (`rules.txt`); rank → `(G-1-rank)/(G-1)`.\n  Within-group ranking is GRPO's native signal and avoids pointwise judge\n  saturation.\n- **Preservation gate**: a second judge audits each rewrite against the\n  source; any meaning change → 0, omissions/additions decay `0.5^n`. This\n  multiplicative gate blocks the classic hack of deleting hard sentences —\n  in smoke tests a claims-deleted rewrite ranks best on clarity but earns\n  near-zero.\n\nJudges run on OpenAI (`gpt-5-mini` by default, `JUDGE_MODEL` to override) —\n`OPENAI_API_KEY` must be present at rollout time (`prime train ... -e OPENAI_API_KEY`).\n\n```bash\nprime env install rishigundakaram/writing-rewrite\nprime eval run writing-rewrite -m openai/gpt-5-nano   # test the reward, no training\nprime train configs/rl/writing.hosted.toml -e OPENAI_API_KEY\n```\n","encoding":"utf-8","truncated":false,"total_bytes":1228},"status":null}