# qwen-applications/march architecture

> Architecture diagram of the GitHub repository qwen-applications/march, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-06-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/qwen-applications/march
- Repository: https://github.com/qwen-applications/march

## Overview

1. **Repository shape**
   - This repo is split into two layers: `verl/` is the main distributed RL framework, and `quarl/` is the MARCH-specific experiment layer that plugs custom fact-checking logic into that framework.
   - The top-level `README` and `quarl/examples/train_march.sh` make it clear that MARCH is not a standalone app; it is a training recipe built on VeRL.

2. **MARCH-specific pipeline**
   - MARCH implements a multi-agent fact-checking loop around RL training: a **Solver** generates an answer, a **Proposer** decomposes it into verifiable claims, and a **Checker** validates claims against retrieved documents.
   - The key architectural goal is “blind verification”: checker-side reward signals should not depend on the solver’s hidden reasoning, only on the generated content and evidence.

3. **Entry points and orchestration**
   - `quarl/quarl/main_rl.py` is the MARCH entrypoint.
   - `quarl/quarl/trainer/ray_trainer_with_fact_check_march.py` is the main trainer integration point for the MARCH variant.
   - In the base framework, `verl/verl/trainer/main_ppo.py`, `main_generation.py`, and `main_eval.py` play the same orchestration role for standard RL/eval flows.

4. **Training control plane**
   - The core training loop is distributed and Ray-driven. VeRL provides the scheduling and worker lifecycle; the MARCH layer specializes the trainer and reward path.
   - `verl/verl/trainer/ppo/ray_trainer.py` and the `verl/verl/single_controller/*` modules define the generic distributed control plane used by many recipes.
   - MARCH’s `quarl/quarl/trainer/*` code customizes that control plane for fact-checking reward computation and rollout handling.

5. **Worker boundary and model execution**
   - Worker code is split by role and backend:
     - `verl/verl/workers/actor/*`
     - `verl/verl/workers/critic/*`
     - `verl/verl/workers/rollout/*`
     - `verl/verl/workers/reward_model/*`
   - Backends include **FSDP** and **Megatron** for training, and **vLLM** / **SGLang** for rollout and inference-side generation.
   - `quarl/quarl/worker/fsdp_worker.py` is the MARCH-side worker specialization, indicating that MARCH leans on the FSDP path.

6. **Reward and fact-checking subsystem**
   - Reward logic is a first-class subsystem in both layers:
     - `verl/verl/workers/reward_manager/*` contains reusable reward manager implementations.
     - `verl/verl/utils/reward_score/*` contains task-specific scoring utilities such as math, GSM8K, Geo3K, search, and sandbox-fusion scoring.
     - `quarl/quarl/reward/*` adds MARCH-specific reward base/manager abstractions.
   - The README’s `CUSTOM_RM_ARGS` and `USE_CHECKER_PPO` show that MARCH extends the reward manager to support custom labels and zero-tolerance/fact-check reward policies.

7. **Data flow**
   - Training data is expected as **Parquet** with at least `prompt` and `label` fields, where prompts contain the user query plus retrieved documents.
   - Data enters through dataset utilities in VeRL (`verl/verl/utils/dataset/*`, `verl/verl/experimental/dataset/*`) and MARCH helper code in `quarl/quarl/utils/data_utils.py`.
   - The flow is: dataset loading → rollout/generation → claim decomposition/checking → reward computation → policy update.

8. **Model and checkpoint management**
   - VeRL separates model definition/weight conversion from training logic:
     - `verl/verl/models/*` contains Hugging Face, Megatron, and mcore adapters.
     - `verl/verl/model_merger/*` and `verl/verl/utils/checkpoint/*` handle checkpoint conversion/merging/saving.
   - This matters architecturally because the repo supports multiple model families and sharding formats, not a single fixed checkpoint layout.
   - MARCH inherits this machinery rather than implementing its own model stack.

9. **Tooling and external inference services**
   - Rollout paths can call external or semi-external inference engines: **SGLang** and **vLLM** are both supported, and there are sharding managers for colocated/distributed rollout.
   - Tooling for multi-agent or retrieval-assisted tasks lives in `verl/verl/tools/*` and includes search, GSM8K, Geo3K, sandbox-fusion, and MCP-based tools.
   - This is important because MARCH’s checker/proposer design depends on evidence retrieval and tool-assisted verification, not just plain text generation.

10. **Configuration and reproducibility**
   - Configuration is YAML-driven across the repo:
     - `verl/verl/trainer/config/*` for framework-level training settings
     - `quarl/quarl/config/rl_config.yaml` for MARCH-specific settings
     - many recipe-specific YAMLs under `verl/recipe/*/config`
   - Shell scripts in `quarl/examples/` and `verl/examples/` are the operational boundary for launching experiments, usually with node/rank/env-var-based distributed setup.

11. **Broader recipe library**
   - `verl/recipe/*` is a catalog of training recipes beyond MARCH: PPO, GRPO, DAPO, PRIME, SPIN, SPPO, R1 distillation, entropy-based training, SFT, and agent-loop experiments.
   - These recipes reuse the same core framework but specialize different algorithmic or data-processing paths.
   - For architecture diagrams, this means the repo is a platform with many experiment “leaf nodes,” not one monolithic training job.

12. **Validation and test surface**
   - The repository includes a large test matrix under `verl/tests/*` covering datasets, workers, rollout backends, distributed behavior, model utilities, and end-to-end recipes.
   - This test layout reinforces the system boundaries: dataset logic, worker execution, rollout engines, reward managers, and full training recipes are independently testable.
   - MARCH-specific confidence comes from the `special_e2e` and interaction/rollout tests that exercise tool-based and multi-turn flows.

13. **Overall architectural diagram takeaway**
   - A useful diagram should show `quarl` as a MARCH customization layer sitting on top of `verl`.
   - The central runtime path is: **Parquet data + configs → distributed trainer (Ray) → actor/critic/rollout workers → proposer/checker/reward managers → checkpoint/logging outputs**.
   - The key architectural differentiator is the fact-checking reward loop, where evidence-grounded checker signals shape policy updates to reduce hallucination.

Main entry points: [`verl/verl/trainer/ppo/ray_trainer.py`](https://github.com/qwen-applications/march/blob/main/verl/verl/trainer/ppo/ray_trainer.py) (PPO trainer), [`quarl/quarl/trainer/ray_trainer_with_fact_check_march.py`](https://github.com/qwen-applications/march/blob/main/quarl/quarl/trainer/ray_trainer_with_fact_check_march.py) (March trainer), [`verl/verl/workers/actor/base.py`](https://github.com/qwen-applications/march/blob/main/verl/verl/workers/actor/base.py) (Workers), [`verl/recipe/README.md`](https://github.com/qwen-applications/march/blob/main/verl/recipe/README.md) (Recipe catalog)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_group_quarl["MARCH layer"]
  node_node_march_entry["MARCH entry<br/>entrypoint<br/>[main_rl.py]"]
  node_node_march_trainer["March trainer<br/>trainer integration"]
  node_node_march_reward["March reward<br/>reward layer<br/>[manager.py]"]
  node_node_march_reward_base["Reward base<br/>reward API<br/>[base.py]"]
  node_node_march_interface_reward["Reward iface<br/>reward interface<br/>[reward.py]"]
  node_node_march_interface_data["Data iface<br/>data interface<br/>[data.py]"]
  node_node_march_data_utils["Data utils<br/>data helpers<br/>[data_utils.py]"]
  node_node_march_fsdp_worker["FSDP worker<br/>worker specialization<br/>[fsdp_worker.py]"]
end

subgraph group_group_verl_core["VeRL core"]
  node_node_verl_main_ppo["PPO main<br/>entrypoint<br/>[main_ppo.py]"]
  node_node_verl_main_gen["Gen main<br/>entrypoint<br/>[main_generation.py]"]
  node_node_verl_main_eval["Eval main<br/>entrypoint<br/>[main_eval.py]"]
  node_node_verl_trainer["PPO trainer<br/>ray control plane<br/>[ray_trainer.py]"]
  node_node_verl_single_controller["Single controller<br/>scheduling layer<br/>[worker_group.py]"]
  node_node_verl_workers["Workers<br/>execution layer<br/>[base.py]"]
  node_node_verl_rollout["Rollout<br/>inference backend<br/>[sglang_rollout.py]"]
  node_node_verl_reward_mgr["Reward mgr<br/>reward manager<br/>[registry.py]"]
  node_node_verl_reward_score["Score utils<br/>scoring library<br/>[math.py]"]
  node_node_verl_dataset["Datasets<br/>dataset layer<br/>[rl_dataset.py]"]
  node_node_verl_models["Models<br/>model adapters<br/>[registry.py]"]
  node_node_verl_ckpt["Checkpoints<br/>model io"]
  node_node_verl_tools["Tools<br/>tooling layer<br/>[base_tool.py]"]
  node_node_verl_config["Configs<br/>configuration<br/>[config.py]"]
end

subgraph group_group_verl_recipes["Recipes"]
  node_node_recipe_catalog["Recipe catalog<br/>recipe collection<br/>[README.md]"]
  node_node_recipe_dapo["DAPO<br/>recipe<br/>[main_dapo.py]"]
  node_node_recipe_prime["PRIME<br/>recipe<br/>[main_prime.py]"]
  node_node_recipe_r1["R1 eval<br/>recipe<br/>[main_eval.py]"]
end

node_node_readme["README<br/>repo overview<br/>[README.md]"]

node_node_readme -->|"describes"| node_node_march_entry
node_node_march_entry -->|"uses"| node_node_march_trainer
node_node_march_trainer -.->|"extends"| node_node_verl_trainer
node_node_march_trainer -->|"computes reward"| node_node_march_reward
node_node_march_reward -->|"builds on"| node_node_march_reward_base
node_node_march_reward -->|"implements"| node_node_march_interface_reward
node_node_march_trainer -->|"consumes"| node_node_march_interface_data
node_node_march_interface_data -->|"backed by"| node_node_march_data_utils
node_node_march_trainer -->|"dispatches"| node_node_march_fsdp_worker
node_node_march_trainer -->|"orchestrates"| node_node_verl_workers
node_node_verl_trainer -->|"uses"| node_node_verl_single_controller
node_node_verl_trainer -->|"drives"| node_node_verl_workers
node_node_verl_workers -->|"includes"| node_node_verl_rollout
node_node_verl_workers -->|"includes"| node_node_verl_reward_mgr
node_node_verl_reward_mgr -->|"scores with"| node_node_verl_reward_score
node_node_verl_trainer -->|"loads"| node_node_verl_dataset
node_node_verl_trainer -->|"trains"| node_node_verl_models
node_node_verl_models -->|"persists via"| node_node_verl_ckpt
node_node_verl_rollout -->|"calls"| node_node_verl_tools
node_node_verl_trainer -->|"configured by"| node_node_verl_config
node_node_recipe_catalog -->|"contains"| node_node_recipe_dapo
node_node_recipe_catalog -->|"contains"| node_node_recipe_prime
node_node_recipe_catalog -->|"contains"| node_node_recipe_r1
node_node_recipe_dapo -->|"reuses"| node_node_verl_trainer
node_node_recipe_prime -->|"reuses"| node_node_verl_trainer
node_node_recipe_r1 -->|"reuses"| node_node_verl_dataset
node_node_march_trainer -.->|"overrides"| node_node_verl_reward_mgr
node_node_march_trainer -->|"uses"| node_node_verl_rollout
node_node_verl_main_ppo -->|"launches"| node_node_verl_trainer
node_node_verl_main_gen -->|"launches"| node_node_verl_trainer
node_node_verl_main_eval -->|"launches"| node_node_verl_trainer

click node_node_readme "https://github.com/qwen-applications/march/blob/main/README.md"
click node_node_march_entry "https://github.com/qwen-applications/march/blob/main/quarl/quarl/main_rl.py"
click node_node_march_trainer "https://github.com/qwen-applications/march/blob/main/quarl/quarl/trainer/ray_trainer_with_fact_check_march.py"
click node_node_march_reward "https://github.com/qwen-applications/march/blob/main/quarl/quarl/reward/manager.py"
click node_node_march_reward_base "https://github.com/qwen-applications/march/blob/main/quarl/quarl/reward/base.py"
click node_node_march_interface_reward "https://github.com/qwen-applications/march/blob/main/quarl/quarl/interface/reward.py"
click node_node_march_interface_data "https://github.com/qwen-applications/march/blob/main/quarl/quarl/interface/data.py"
click node_node_march_data_utils "https://github.com/qwen-applications/march/blob/main/quarl/quarl/utils/data_utils.py"
click node_node_march_fsdp_worker "https://github.com/qwen-applications/march/blob/main/quarl/quarl/worker/fsdp_worker.py"
click node_node_verl_main_ppo "https://github.com/qwen-applications/march/blob/main/verl/verl/trainer/main_ppo.py"
click node_node_verl_main_gen "https://github.com/qwen-applications/march/blob/main/verl/verl/trainer/main_generation.py"
click node_node_verl_main_eval "https://github.com/qwen-applications/march/blob/main/verl/verl/trainer/main_eval.py"
click node_node_verl_trainer "https://github.com/qwen-applications/march/blob/main/verl/verl/trainer/ppo/ray_trainer.py"
click node_node_verl_single_controller "https://github.com/qwen-applications/march/blob/main/verl/verl/single_controller/base/worker_group.py"
click node_node_verl_workers "https://github.com/qwen-applications/march/blob/main/verl/verl/workers/actor/base.py"
click node_node_verl_rollout "https://github.com/qwen-applications/march/blob/main/verl/verl/workers/rollout/sglang_rollout/sglang_rollout.py"
click node_node_verl_reward_mgr "https://github.com/qwen-applications/march/blob/main/verl/verl/workers/reward_manager/registry.py"
click node_node_verl_reward_score "https://github.com/qwen-applications/march/blob/main/verl/verl/utils/reward_score/math.py"
click node_node_verl_dataset "https://github.com/qwen-applications/march/blob/main/verl/verl/utils/dataset/rl_dataset.py"
click node_node_verl_models "https://github.com/qwen-applications/march/blob/main/verl/verl/models/registry.py"
click node_node_verl_ckpt "https://github.com/qwen-applications/march/blob/main/verl/verl/utils/checkpoint/checkpoint_manager.py"
click node_node_verl_tools "https://github.com/qwen-applications/march/blob/main/verl/verl/tools/base_tool.py"
click node_node_verl_config "https://github.com/qwen-applications/march/blob/main/verl/verl/trainer/config/config.py"
click node_node_recipe_catalog "https://github.com/qwen-applications/march/blob/main/verl/recipe/README.md"
click node_node_recipe_dapo "https://github.com/qwen-applications/march/blob/main/verl/recipe/dapo/main_dapo.py"
click node_node_recipe_prime "https://github.com/qwen-applications/march/blob/main/verl/recipe/prime/main_prime.py"
click node_node_recipe_r1 "https://github.com/qwen-applications/march/blob/main/verl/recipe/r1/main_eval.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_node_march_entry,node_node_march_trainer,node_node_march_reward,node_node_march_reward_base,node_node_march_interface_reward,node_node_march_interface_data,node_node_march_data_utils,node_node_march_fsdp_worker toneBlue
class node_node_verl_main_ppo,node_node_verl_main_gen,node_node_verl_main_eval,node_node_verl_trainer,node_node_verl_single_controller,node_node_verl_workers,node_node_verl_rollout,node_node_verl_reward_mgr,node_node_verl_reward_score,node_node_verl_dataset,node_node_verl_models,node_node_verl_ckpt,node_node_verl_tools,node_node_verl_config toneAmber
class node_node_recipe_catalog,node_node_recipe_dapo,node_node_recipe_prime,node_node_recipe_r1 toneMint
class node_node_readme toneNeutral
```

## Components

### MARCH layer

MARCH-specific experiment code layered on top of VeRL.

- [MARCH entry](https://github.com/qwen-applications/march/blob/main/quarl/quarl/main_rl.py): entrypoint · Launches the MARCH RL workflow. · `quarl/quarl/main_rl.py`
- [March trainer](https://github.com/qwen-applications/march/blob/main/quarl/quarl/trainer/ray_trainer_with_fact_check_march.py): trainer integration · Ray trainer specialization for fact-checking reward and rollout handling. · `quarl/quarl/trainer/ray_trainer_with_fact_check_march.py`
- [March reward](https://github.com/qwen-applications/march/blob/main/quarl/quarl/reward/manager.py): reward layer · MARCH-specific reward abstractions and manager hooks. · `quarl/quarl/reward/manager.py`
- [Reward base](https://github.com/qwen-applications/march/blob/main/quarl/quarl/reward/base.py): reward API · Base reward interfaces used by the MARCH layer. · `quarl/quarl/reward/base.py`
- [Reward iface](https://github.com/qwen-applications/march/blob/main/quarl/quarl/interface/reward.py): reward interface · Interface boundary for plugging MARCH reward logic into the framework. · `quarl/quarl/interface/reward.py`
- [Data iface](https://github.com/qwen-applications/march/blob/main/quarl/quarl/interface/data.py): data interface · Interface boundary for dataset and label handling. · `quarl/quarl/interface/data.py`
- [Data utils](https://github.com/qwen-applications/march/blob/main/quarl/quarl/utils/data_utils.py): data helpers · MARCH helpers for loading and shaping training data. · `quarl/quarl/utils/data_utils.py`
- [FSDP worker](https://github.com/qwen-applications/march/blob/main/quarl/quarl/worker/fsdp_worker.py): worker specialization · MARCH-side worker specialization aligned with the FSDP execution path. · `quarl/quarl/worker/fsdp_worker.py`

### VeRL core

Distributed RL framework, training control plane, workers, and utilities.

- [PPO main](https://github.com/qwen-applications/march/blob/main/verl/verl/trainer/main_ppo.py): entrypoint · Standard PPO training entrypoint. · `verl/verl/trainer/main_ppo.py`
- [Gen main](https://github.com/qwen-applications/march/blob/main/verl/verl/trainer/main_generation.py): entrypoint · Standard generation entrypoint. · `verl/verl/trainer/main_generation.py`
- [Eval main](https://github.com/qwen-applications/march/blob/main/verl/verl/trainer/main_eval.py): entrypoint · Standard evaluation entrypoint. · `verl/verl/trainer/main_eval.py`
- [PPO trainer](https://github.com/qwen-applications/march/blob/main/verl/verl/trainer/ppo/ray_trainer.py): ray control plane · Generic distributed trainer orchestration for PPO, generation, and eval flows. · `verl/verl/trainer/ppo/ray_trainer.py`
- [Single controller](https://github.com/qwen-applications/march/blob/main/verl/verl/single_controller/base/worker_group.py): scheduling layer · Generic worker lifecycle, registration, and scheduling primitives. · `verl/verl/single_controller/base/worker_group.py`
- [Workers](https://github.com/qwen-applications/march/blob/main/verl/verl/workers/actor/base.py): execution layer · Actor, critic, rollout, and reward-model workers. · `verl/verl/workers/actor/base.py`
- [Rollout](https://github.com/qwen-applications/march/blob/main/verl/verl/workers/rollout/sglang_rollout/sglang_rollout.py): inference backend · Generation backends and async rollout servers for HF, vLLM, and SGLang. · `verl/verl/workers/rollout/sglang_rollout/sglang_rollout.py`
- [Reward mgr](https://github.com/qwen-applications/march/blob/main/verl/verl/workers/reward_manager/registry.py): reward manager · Reusable reward manager implementations and registry. · `verl/verl/workers/reward_manager/registry.py`
- [Score utils](https://github.com/qwen-applications/march/blob/main/verl/verl/utils/reward_score/math.py): scoring library · Task-specific scoring utilities for math, GSM8K, Geo3K, search, and sandbox-fusion. · `verl/verl/utils/reward_score/math.py`
- [Datasets](https://github.com/qwen-applications/march/blob/main/verl/verl/utils/dataset/rl_dataset.py): dataset layer · RL, RM, SFT, multiturn, and experimental dataset loaders and samplers. · `verl/verl/utils/dataset/rl_dataset.py`
- [Models](https://github.com/qwen-applications/march/blob/main/verl/verl/models/registry.py): model adapters · Hugging Face, Megatron, and mcore model adapters and registries. · `verl/verl/models/registry.py`
- [Checkpoints](https://github.com/qwen-applications/march/blob/main/verl/verl/utils/checkpoint/checkpoint_manager.py): model io · Checkpoint saving, loading, merging, and conversion utilities. · `verl/verl/utils/checkpoint/checkpoint_manager.py`
- [Tools](https://github.com/qwen-applications/march/blob/main/verl/verl/tools/base_tool.py): tooling layer · Search, GSM8K, Geo3K, sandbox-fusion, and MCP-based tools for agentic and retrieval-assisted flows. · `verl/verl/tools/base_tool.py`
- [Configs](https://github.com/qwen-applications/march/blob/main/verl/verl/trainer/config/config.py): configuration · YAML-driven trainer, worker, rollout, and recipe configuration. · `verl/verl/trainer/config/config.py`

### Recipes

Algorithm and task recipes built on the shared framework.

- [Recipe catalog](https://github.com/qwen-applications/march/blob/main/verl/recipe/README.md): recipe collection · Algorithm-specific recipes such as PPO, GRPO, DAPO, PRIME, SPIN, SPPO, R1 distillation, SFT, and agent loops. · `verl/recipe/README.md`
- [DAPO](https://github.com/qwen-applications/march/blob/main/verl/recipe/dapo/main_dapo.py): recipe · Recipe specialization for DAPO training. · `verl/recipe/dapo/main_dapo.py`
- [PRIME](https://github.com/qwen-applications/march/blob/main/verl/recipe/prime/main_prime.py): recipe · Recipe specialization for PRIME training. · `verl/recipe/prime/main_prime.py`
- [R1 eval](https://github.com/qwen-applications/march/blob/main/verl/recipe/r1/main_eval.py): recipe · Evaluation/distillation recipe for R1-style workflows. · `verl/recipe/r1/main_eval.py`

### Other components

- [README](https://github.com/qwen-applications/march/blob/main/README.md): repo overview · Documents the repository as a MARCH recipe built on VeRL. · `README.md`

## Connections

- README → MARCH entry: describes · Repository README frames MARCH as a VeRL-based recipe.
- MARCH entry → March trainer: uses · Entry point routes into the MARCH trainer.
- March trainer → PPO trainer: extends · MARCH customizes the generic Ray trainer control plane.
- March trainer → March reward: computes reward · Fact-checking reward is specialized in the MARCH layer.
- March reward → Reward base: builds on · Reward manager uses shared reward abstractions.
- March reward → Reward iface: implements · Interfaces expose the MARCH reward contract.
- March trainer → Data iface: consumes · Trainer consumes labeled prompt/document data through the interface.
- Data iface → Data utils: backed by · Data interface is supported by MARCH data helpers.
- March trainer → FSDP worker: dispatches · MARCH leans on the FSDP worker specialization.
- March trainer → Workers: orchestrates · Trainer schedules actor/critic/rollout worker roles.
- PPO trainer → Single controller: uses · Core trainer relies on single-controller scheduling primitives.
- PPO trainer → Workers: drives · Distributed training runs across worker roles.
- Workers → Rollout: includes · Rollout workers provide generation and inference backends.
- Workers → Reward mgr: includes · Reward manager is part of the worker execution boundary.
- Reward mgr → Score utils: scores with · Reward managers delegate to task-specific scorers.
- PPO trainer → Datasets: loads · Training loops begin with dataset ingestion.
- PPO trainer → Models: trains · Trainer operates over multiple model families and adapters.
- Models → Checkpoints: persists via · Model families share checkpoint conversion and saving machinery.
- Rollout → Tools: calls · Tool-assisted rollout and retrieval support agentic flows.
- PPO trainer → Configs: configured by · Framework behavior is YAML-driven.
- Recipe catalog → DAPO: contains · Recipe catalog includes DAPO.
- Recipe catalog → PRIME: contains · Recipe catalog includes PRIME.
- Recipe catalog → R1 eval: contains · Recipe catalog includes R1 evaluation/distillation.
- DAPO → PPO trainer: reuses · Recipe-specific entrypoints reuse the shared trainer stack.
- PRIME → PPO trainer: reuses · Recipe-specific entrypoints reuse the shared trainer stack.
- R1 eval → Datasets: reuses · Evaluation recipes reuse dataset and task utilities.
- March trainer → Reward mgr: overrides · MARCH extends reward management for blind verification policies.
- March trainer → Rollout: uses · MARCH rollout path produces solver answers and evidence-grounded outputs.
- PPO main → PPO trainer: launches · PPO entrypoint starts the distributed trainer.
- Gen main → PPO trainer: launches · Generation entrypoint starts the shared trainer stack.
- Eval main → PPO trainer: launches · Evaluation entrypoint starts the shared trainer stack.
