# Environments
This folder contains installable example environments that showcase common usage patterns in Verifiers. Each module exposes a `load_environment(...)` function that returns a ready-to-use `vf.Environment` object.
## Quick start
- **Install an environment from this GitHub repo**: `vf-install math-python --from-repo`
- **Evaluate**: `vf-eval math-python` (defaults to gpt-4.1-mini, small sample)
## Common usage patterns and examples
### SingleTurnEnv (prompt → single response)
- **gsm8k**: Classic QA with exact-match reward; toggles `ThinkParser` vs `Parser` and format reward.
- **math**: Hendrycks MATH dataset with `MathRubric` reward (using HuggingFace's `math-verify` scorer).
- **reverse_text**: XML formatting with non-binary LCS reward + format reward.
- **gpqa**: Multiple-choice; demonstrates optional judge-based secondary scoring via `RubricGroup`.
- **simpleqa**: Judge-graded A/B/C classification using `JudgeRubric` rewards.
- **summarize_text**: Multiple rewards (length/format + similarity) combined in one `Rubric`.
- **continuation_quality**: Completion-style generation (`message_type="completion"`) judged for prose quality with `JudgeRubric`.
- **mmmu**: Multimodal inputs (image + text) packed in chat content; single-turn boxed-answer check.
### SingleTurnEnv subclass (custom dataset/scoring wrappers)
- **reasoning_gym_env**: Wraps `reasoning_gym` procedural datasets, converts to HF datasets, uses `XMLParser` and task-specific scoring.
### MultiTurnEnv (custom interaction protocols)
- **doublecheck**: Simple follow-up turn ("Are you sure?") with math rewards; minimal `is_completed`/`env_response` implementation.
- **sentence_repeater**: Multi-turn Q/A over a paragraph; rewards compare assistant messages to expected answers.
- **wordle**: Game-style interaction via `TextArenaEnv`; multiple rewards (correctness, partial credit, few-turn bonus) and XML formatting.
### Tool use
- **ToolEnv (native function-calling)**
- **tool_test**: Validates parallel tool calls and checks exact tool usage via `ToolRubric` + custom reward.
- **wiki_search**: Multi-tool retrieval (search/view/read) with `ToolEnv`; final judgment combined via `RubricGroup` with a `JudgeRubric`.
- **XML tool calling (roll-your-own on MultiTurnEnv)**
- **xml_tool_env**: Parses `{...}` commands with `XMLParser`, executes Python functions, and returns `...` via `env_response`.
- **xlam_function_calling**: Single-turn XML tool-call verification (no execution) that checks called tools match the ground truth list.
- **smolagents_math_tools**: Integrates Smolagents `Tool` objects and a custom parser for tool/answer XML; demonstrates external tool frameworks.
### Sandboxes
- **PythonEnv (ipython-style REPL)**
- **math_python**: Solve math problems using Python in a sandbox environment.
### Composition
- **EnvGroup**
- **math_group**: Groups two `SingleTurnEnv` tasks (GSM8K + Math) into one environment with shared interface.
- **RubricGroup**
- **math_python**: `ToolRubric` (tool adherence) + `MathRubric` (answer correctness).
- **gpqa**: Adds a `JudgeRubric` alongside base rubric for auxiliary scoring.
- **wiki_search**: Merges judge scoring with the tool-use rubric.
### Judge-based evaluation (LLM-as-judge)
- **simpleqa**: Judge rubric maps graded letters to reward.
- **continuation_quality**: Judge rubric extracts `` and maps A–F to a continuous score.
- **toxicity_explanation**: Judge rubric returns 0–10 normalized score for both classification correctness and explanation quality.
- **self_reward**: pattern for `SingleTurnEnv` with only a `JudgeRubric` over a dataset that supplies `question`/`answer`; intended for online RL where model acts as its own judge.
### Parsers and formatting
- **ThinkParser**: Used in `gsm8k`, `wiki_search` to separate reasoning from final answers.
- **XMLParser**: Used in `reverse_text`, `wordle`, `summarize_text`, `reasoning_gym_env`, `xml_tool_env`, `xlam_function_calling` to enforce structured outputs and enable format rewards.
- **Custom parsers**: `smolagents_math_tools` defines a bespoke parser to interoperate with external tool schemas.
### Multimodal inputs
- **mmmu**: Demonstrates passing images via chat `content` items with `{type: "image_url", image_url: {url: ...}}` and standard answer parsing.
## What to look at for each pattern
- **Minimal SingleTurnEnv**: `reverse_text`, `gsm8k`
- **JudgeRubric end-to-end**: `simpleqa`, `continuation_quality`, `toxicity_explanation`, `self_reward`
- **ToolEnv with real tools**: `wiki_search`, `math_python`
- **Custom MultiTurnEnv**: `doublecheck`, `sentence_repeater`, `wordle`
- **XML tools without native function-calling**: `xml_tool_env`, `xlam_function_calling`
- **Environment and rubric composition**: `math_group`, `math_python`, `gpqa`, `wiki_search`
- **Procedural datasets**: `reasoning_gym_env`
- **Multimodal**: `mmmu`
## Running examples
All environments export `load_environment(...)`.
In-line usage:
```python
import verifiers as vf
from openai import AsyncOpenAI
vf_env = vf.load_environment("reverse-text")
results = vf_env.evaluate(client=AsyncOpenAI(), model="gpt-4.1-mini", num_examples=25)
```
CLI usage:
```bash
vf-install reverse-text --from-repo
vf-eval reverse-text -n 50 -r 1
```
If you are building a new environment, prefer starting from `vf-init` and consult the top-level README and docs for dataset format, parser/rubric design, and rollout constraints.