Skip to main content
Most of Miles’s behavior can be replaced with user-supplied Python by passing a --*-path flag. This page lists every such hook, the function signature it expects, and the default it replaces.

At a glance


Rollout

--rollout-function-path

Replace the entire rollout function. Use this only for fundamentally different flows such as multi-agent co-evolution.
Default: miles.rollout.sglang_rollout.generate_rollout, or miles.rollout.inference_rollout.inference_rollout_common.InferenceRolloutFn when enable_experimental_rollout_refactor() is on. Reference: examples/experimental/multi_agent/rollout_with_multi_agents.py.

--custom-generate-function-path

Replace just the generation step inside the default rollout. Most tool-use, RAG, and multi-turn workflows live here.
Reference: examples/experimental/search-r1/generate_with_search.py.

--data-source-path

Default: miles.rollout.data_source.RolloutDataSourceWithBuffer.

--eval-function-path

Same signature as --rollout-function-path. Defaults to whatever rollout function is configured.

Reward

--custom-rm-path

Built-in --rm-type options: math, dapo, deepscaler, f1, gpqa, ifbench, remote_rm (with --rm-url), random.

--custom-reward-post-process-path

Hook to normalize rewards differently from the default GRPO normalization.

Filtering

--dynamic-sampling-filter-path

Per-group filter; runs after scoring, before queueing for training.
Stock implementation: miles.rollout.filter_hub.dynamic_sampling_filters.check_reward_nonzero_std.

--buffer-filter-path

Pops samples from the rollout buffer at dequeue time. The default is pop_first in miles/rollout/data_source.py.

--rollout-sample-filter-path

Per-sample, in-place. Set s.remove_sample = True to exclude a sample from the loss (advantage normalization still uses it). The framework passes data: list[list[Sample]] — a list of n_samples_per_prompt-size groups — so iterate the outer list once to reach Sample objects:

--rollout-all-samples-process-path

Runs after rollout completes and can see all samples, including filtered ones. Useful for logging or analysis.

--rollout-data-postprocess-path

Runs after log probabilities have been computed but before training. Useful for updating loss masks based on per-token logprobs.

Training

--custom-loss-function-path

Replace the GRPO/PPO loss. Requires --loss-type custom_loss. Useful for novel objectives or multi-objective work.

--custom-tis-function-path

Importance sampling correction for off-policy training when train and inference diverge. Reference: examples/infra_features/train_infer_mismatch_helper/mis.py.

--custom-pg-loss-reducer-function-path

Use case: Dr.GRPO divides by a constant instead of effective token count. Reference: examples/experimental/DrGRPO/custom_reducer.py.

--custom-convert-samples-to-train-data-path


Megatron hooks

The Megatron init, log-prob, and train-step hooks give access to the live model and optimizer, useful for custom probes, weight clipping, or surgical interventions. The post-save hook runs on rank 0 after checkpoint save completion and receives the saved checkpoint paths instead of live model objects.

Logging

Return True to suppress Miles’s default logging, False to layer on top.

Model

--custom-model-provider-path

Replace Megatron’s default model factory.

Worked example

A custom rollout plus a custom reward in one launch script:
That is the entire delta from the stock GRPO recipe, with no source changes to Miles. → Next: Server arguments reference