Skip to content
Merged
Show file tree
Hide file tree
Changes from 163 commits
Commits
Show all changes
167 commits
Select commit Hold shift + click to select a range
cac78d7
Add environment selector
rafapi Nov 4, 2025
df1d846
Fix env launcher
rafapi Nov 4, 2025
9735130
Adapt domains to env registry
rafapi Nov 4, 2025
bb5e5ca
Adapt domain configs
rafapi Nov 4, 2025
a1a02bf
Collect env info
rafapi Nov 4, 2025
e4d0bc4
Remove unrelated files
rafapi Nov 6, 2025
da43cbc
Remove backup
rafapi Nov 6, 2025
5b18001
Remove duplicates
rafapi Nov 6, 2025
9af7329
Restore
rafapi Nov 6, 2025
599b510
add domains
rafapi Nov 8, 2025
32eb5b8
add coding
rafapi Nov 8, 2025
efaec65
Add remaining loaders
rafapi Nov 8, 2025
1220f6d
Domain mix tracking metrics
rafapi Nov 16, 2025
158b2ea
update domain rollouts
rafapi Nov 16, 2025
fe8e728
refresh async llm flow
rafapi Nov 16, 2025
6f9c5cc
sync coding init
rafapi Nov 16, 2025
455ed42
expand coding dataset
rafapi Nov 16, 2025
795e490
remove legacy executor
rafapi Nov 16, 2025
68072b1
revise coding rollouts
rafapi Nov 16, 2025
981cb74
adjust multidomain loader
rafapi Nov 16, 2025
f7e6946
refresh preprocess pipeline
rafapi Nov 16, 2025
73ca9d1
enhance utils helpers
rafapi Nov 16, 2025
38ff188
add multi domain config
rafapi Nov 16, 2025
2c5ebfd
introduce domain sampling
rafapi Nov 16, 2025
40cf648
add coding sandbox test
rafapi Nov 16, 2025
2c74b77
implement verifier api
rafapi Nov 16, 2025
cdfe57b
add symbolic init
rafapi Nov 16, 2025
a3c4106
add symbolic dataset
rafapi Nov 16, 2025
7eef15e
add symbolic rollouts
rafapi Nov 16, 2025
cc091ac
remove deleted domains
rafapi Nov 17, 2025
7664773
remove symbolic
rafapi Nov 17, 2025
120ba7b
restore env replica compatibility and uniqueness
rafapi Nov 17, 2025
f8d147e
fix
rafapi Nov 17, 2025
62ad5fb
up test len
rafapi Nov 17, 2025
2d22d5e
per domain logging
rafapi Nov 18, 2025
52fcb56
add domain to rollout data
rafapi Nov 18, 2025
9da8f04
keep existing env_replicas value
rafapi Nov 18, 2025
3368e69
restore template
rafapi Nov 18, 2025
2831252
add default to rep per actor
rafapi Nov 18, 2025
cb916c1
weight replicas by domain mix
rafapi Nov 18, 2025
a6ad805
add easy mix configs
rafapi Nov 18, 2025
2243897
remove bloated coding rewards
rafapi Nov 18, 2025
0cbc542
use existing reward structure
rafapi Nov 18, 2025
6888e05
Merge branch 'main' into multi-env
rafapi Nov 18, 2025
4adcd81
fix naming
rafapi Nov 19, 2025
a5a6e44
fix cache data composition
rafapi Nov 19, 2025
dca8a43
remove tapeagents imports
rafapi Nov 19, 2025
84b6587
remove tapeagents imports
rafapi Nov 19, 2025
8bbca61
add fn_calling
rafapi Nov 19, 2025
1937578
coding conf
rafapi Nov 19, 2025
69b5154
main mix config
rafapi Nov 19, 2025
fd2fc3b
fix finish reason detection
rafapi Nov 19, 2025
b139560
include fn_calling loader
rafapi Nov 19, 2025
8b5c159
add domain_mix placeholder
rafapi Nov 19, 2025
b876adb
add fn_calling
rafapi Nov 19, 2025
904c80e
fix path
rafapi Nov 19, 2025
e4017d9
change mix
rafapi Nov 19, 2025
d7935d0
Fix strings
rafapi Nov 20, 2025
8e2e7b3
ensure we arere passing an empty call type
rafapi Nov 20, 2025
5e10988
fix imports
rafapi Nov 20, 2025
dac01c1
return
rafapi Nov 22, 2025
eb3bacf
return too
rafapi Nov 22, 2025
f5093bf
return more
rafapi Nov 22, 2025
27a2a6d
extract ability list
rafapi Nov 22, 2025
5aea032
normalise prompt
rafapi Nov 22, 2025
02f9294
add missing math-code mix config
rafapi Nov 24, 2025
f6c128c
declare zero weight domains
rafapi Nov 24, 2025
60169b2
use hydra object conversion
rafapi Nov 24, 2025
a3de18e
remove empty lines
rafapi Nov 24, 2025
ba360fa
fix end of line
rafapi Nov 24, 2025
f405321
remove tapeagents import
rafapi Nov 24, 2025
bba110d
remove duplicate code
rafapi Nov 24, 2025
8f60aa2
Merge branch 'main' into multi-env
rafapi Nov 26, 2025
67ffd60
fix imports
rafapi Nov 26, 2025
7ea8744
remove redundant object conversion
rafapi Nov 26, 2025
182ee6e
init dataset placeholders
rafapi Nov 28, 2025
6bc73eb
flattent and convert to python object
rafapi Nov 28, 2025
63c3035
fix per domain system prompt
rafapi Nov 28, 2025
fa9a9bc
add sys prompt for coding
rafapi Nov 28, 2025
5e9b037
only spawn environments present in domain mix
rafapi Nov 28, 2025
2677ad9
adaptive sampling
rafapi Nov 29, 2025
48afae1
track domains
rafapi Nov 29, 2025
00fd6cb
track domains
rafapi Nov 29, 2025
ee61fbf
Merge main
rafapi Jan 16, 2026
db19fa8
Merge main
rafapi Jan 16, 2026
2879b4c
clean depts
rafapi Jan 16, 2026
e16a81a
fix payload overrides
rafapi Jan 16, 2026
9d93cf4
remove redundant decorator
rafapi Jan 16, 2026
28dc0b5
move to open code data
rafapi Jan 18, 2026
d86c3db
use open data for function calling
rafapi Jan 18, 2026
cbf56eb
add new logic domain
rafapi Jan 18, 2026
eafd8d1
add logic config
rafapi Jan 18, 2026
cf8e059
add new domains to mixer
rafapi Jan 18, 2026
72ce0b7
add code eval
rafapi Jan 19, 2026
92207ec
add instruction following
rafapi Jan 19, 2026
eb5df47
add readme to explain domain speciffics
rafapi Jan 19, 2026
360edb8
fix code extraction regex
rafapi Jan 20, 2026
51fe2dc
fix line
rafapi Jan 20, 2026
fbdb01d
fix stdin simulation to support sys.stdin.buffer
rafapi Jan 20, 2026
f094e68
fix categories
rafapi Jan 21, 2026
a6f7af5
add ifeval and livecodebench
rafapi Jan 21, 2026
4a21c9c
fix ranges
rafapi Jan 21, 2026
b2deb7a
restart sandbox after crash
rafapi Jan 21, 2026
711160c
add new domain loaders
rafapi Jan 21, 2026
1d345da
fix tool parsing
rafapi Jan 21, 2026
ed30afe
fix comms
rafapi Jan 21, 2026
e6f39f0
convert tool cool to expected format
rafapi Jan 21, 2026
cbefb09
use default reward table
rafapi Jan 21, 2026
9d36e6c
add reward tooling
rafapi Jan 21, 2026
e4e512e
use multiple sandboxes
rafapi Jan 22, 2026
156f68d
filter by source
rafapi Jan 22, 2026
791ff0b
use dandobox pool
rafapi Jan 22, 2026
6137469
Added support for hf datasets in math
Jan 26, 2026
4c29772
aime_2025 simplified
Jan 27, 2026
85e58c4
switch coding to TACO+APPS datasets
rafapi Jan 31, 2026
8947b44
switch to SandboxFusion
rafapi Jan 31, 2026
711ea8c
Merge branch 'multi-env' of github.com:ServiceNow/PipelineRL into mul…
rafapi Jan 31, 2026
5fc0739
Fix default version
rafapi Jan 31, 2026
c7ac458
avoid failures from incomplete prompts (func names)
rafapi Jan 31, 2026
86f1cf0
add subset dispatching for dataset names
rafapi Jan 31, 2026
96fa3c8
use RPC only
rafapi Jan 31, 2026
e4c7c73
fix Java normalization
rafapi Jan 31, 2026
9a556e7
avoid failures from incomplete prompts (func names)
rafapi Jan 31, 2026
1cc881b
switch to IFEvalG, add RPC server
rafapi Jan 31, 2026
eb87d87
use RPC verification, add length penalty
rafapi Jan 31, 2026
5651bdb
add train/test split
rafapi Jan 31, 2026
b8bc5ab
simplify verifier API, add timeout handling
rafapi Jan 31, 2026
2e8a908
add length penalty
rafapi Jan 31, 2026
8b62597
subset dispatching
rafapi Jan 31, 2026
60ef983
add IFEvalG module for constraint checking
rafapi Jan 31, 2026
97d230f
add configs
rafapi Jan 31, 2026
288bdd1
fix configs
rafapi Jan 31, 2026
0164307
add ifeval conf
rafapi Jan 31, 2026
ad11d7a
use fn_name correctly
rafapi Feb 1, 2026
37860f2
skip flat tasks
rafapi Feb 1, 2026
9d7213f
skip flat tasks
rafapi Feb 1, 2026
5d165ec
udt
rafapi Feb 1, 2026
e704e56
return correct type when casting
rafapi Feb 4, 2026
e6c333f
use all fn_calling tasks
rafapi Feb 4, 2026
58bcc4d
new deps
rafapi Feb 4, 2026
9ae6bfa
simplify configs
rafapi Feb 4, 2026
8209d7b
better domain_mix base
rafapi Feb 4, 2026
3d9b12e
remove extra mix
rafapi Feb 4, 2026
a71eeb8
remove redundant domain extraction from actor
rafapi Feb 4, 2026
ada52ee
add explicit domain field to math rollouts
rafapi Feb 4, 2026
3b0930e
add explicit domain field to coding rollouts
rafapi Feb 4, 2026
41f9610
add explicit domain field to fn_calling rollouts
rafapi Feb 4, 2026
dbfdc3a
add explicit domain field to guessing rollouts
rafapi Feb 4, 2026
24a2b1d
add explicit domain field to counting rollouts
rafapi Feb 4, 2026
492bfcb
add explicit domain field to counting tapeagent
rafapi Feb 4, 2026
30ce103
add explicit domain field to chartqa rollouts
rafapi Feb 4, 2026
7ab076a
add explicit domain field to miniwob rollouts
rafapi Feb 4, 2026
d13a485
add explicit domain field to deep_research rollouts
rafapi Feb 4, 2026
48d15db
remove actor.domain_mix null override from base
rafapi Feb 4, 2026
fce7011
remove actor.domain_mix null override
rafapi Feb 4, 2026
3e180a7
let single-env configs fall back to env_replicas
rafapi Feb 4, 2026
5a94da6
restore cfg.environment for tapeagents compat
rafapi Feb 4, 2026
9aace39
remove math from debug config (needs verifier)
rafapi Feb 4, 2026
b39e9f3
revert web.yaml to main (keep environment singular)
rafapi Feb 4, 2026
b8c71c4
add math env to debug multi domain config
rafapi Feb 4, 2026
dc9dc2f
add math env to debug multi domain config
rafapi Feb 4, 2026
76a9a84
add missing _self_ to multi_domain base
rafapi Feb 4, 2026
a423d76
remove domain_mix from base defaults
rafapi Feb 4, 2026
6e54a7f
make sandbox url required
rafapi Feb 4, 2026
14cd4f0
remove readme
rafapi Feb 4, 2026
45efba8
move sandbox config to top level in coding.yaml
rafapi Feb 4, 2026
5ad90c3
use top-level sandbox config, make endpoint required
rafapi Feb 4, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion conf/base.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -141,4 +141,3 @@ wandb:
wandb_dir: null
# Comma-separated list of keywords to tag the run.
tags: []

47 changes: 47 additions & 0 deletions conf/coding.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
defaults:
- base
- _self_

actor:
rollout_policy: pipelinerl.domains.coding.generate_coding_rollout
# Empty system prompt - the problems already include instructions like:
# "Read the inputs from stdin...Enclose your code within ```python delimiters."
# Adding extra instructions can conflict with the model's native prompt format.
system_prompt: ""
task_template: |-
{task}

Write your solution in Python. Be concise. Output only the code in a single ```python``` block.
task_prompt: ""
ensure_boxed_answers: false

# SandboxFusion verification endpoint (override via SANDBOX_ENDPOINT env var)
sandbox_endpoint: ${oc.env:SANDBOX_ENDPOINT,http://127.0.0.1:8080}
Comment thread
rafapi marked this conversation as resolved.
Outdated
sandbox_timeout: 10.0
max_tests_per_problem: 5

# Use combined TACO + APPS dataset
dataset_loader: pipelinerl.domains.coding.dataset.load_problems
dataset_loader_params:
taco_split: train
apps_split: train
subset: train # "train", "test", or "all"
train_ratio: 0.9
# Filter out HARD and VERY_HARD from TACO (APPS kept as-is)
taco_excluded_difficulties:
- HARD
- VERY_HARD
# Limit test cases per problem (aligned with median test counts)
max_tests_per_problem: 5
max_examples: null
seed: 42
huggingface_token: ${oc.env:HF_TOKEN, null}

train_dataset_names:
- taco
- apps

test_dataset_names:
- livecodebench_v5

environment_key: coding

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

environment_key is only set when there's only a single environment (as in math.yaml, fn_calling.yaml, ...), while in multi-domain settings such as debug/multi_domain.yaml and elsewhere, it is not set. It seems to me that we don't need it.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

environment_key is useful in single domain configs for domain metrics tracking. if we don't have it we must ensure all the problems have a explicit domain field. for this use case we really want to ensure. but i will look for ways to simplify this.

@ehsk ehsk Feb 4, 2026

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How about resolving environment_key from environments where only a single environment is defined? which can handled in resolve_environment_key in utils.py

And domains with no environments can be hard-coded in their load_datasets scripts

33 changes: 33 additions & 0 deletions conf/debug/multi_domain.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# @package _global_
defaults:
- /base
- /domain_rollouts@domain_rollouts: base
- override /rewards: success_and_format
- _self_

actor:
rollout_policy: pipelinerl.domains.dispatcher.generate_multidomain_rollout
llm_max_rollouts: 2
rollout_workers: 1
domain_rollouts:
math: ${domain_rollouts.math}
guessing: ${domain_rollouts.guessing}
coding: ${domain_rollouts.coding}

dataset_loader: pipelinerl.domains.multidomain.load_problems
train_dataset_names:
- math_debug
- guessing_debug
- coding_debug
test_dataset_names:
- math_debug
- coding_debug

environments:
- key: math
mode: remote
replicas_per_actor: ${world.env_replicas_per_actor}
_target_: pipelinerl.domains.math.MathEnvironment

world:
env_replicas_per_actor: 1
8 changes: 8 additions & 0 deletions conf/domain_mix/base.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# @package actor.domain_mix
# Default domain mix weights for multi-domain training

math: 0.35
coding: 0.25
logic: 0.15
ifeval: 0.15
fn_calling: 0.10
11 changes: 11 additions & 0 deletions conf/domain_rollouts/base.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# Mapping between domain identifiers and rollout callables.
math: pipelinerl.domains.math.generate_math_rollout
guessing: pipelinerl.domains.guessing.generate_guessing_rollout
counting: pipelinerl.domains.counting.generate_counting_rollout
miniwob: pipelinerl.domains.miniwob.rollouts.generate_miniwob_rollout
chartqa: pipelinerl.domains.chartqa.generate_chartqa_rollout
coding: pipelinerl.domains.coding.generate_coding_rollout
livecodebench: pipelinerl.domains.coding.generate_coding_rollout
fn_calling: pipelinerl.domains.fn_calling.generate_fn_calling_rollout
logic: pipelinerl.domains.logic.generate_logic_rollout
ifeval: pipelinerl.domains.ifeval.generate_ifeval_rollout
53 changes: 53 additions & 0 deletions conf/fn_calling.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
defaults:
- base
- _self_

actor:
rollout_policy: pipelinerl.domains.fn_calling.generate_fn_calling_rollout
# System prompt is intentionally empty - the chat template will inject
# tool instructions when tools are present in the request
system_prompt: ""
task_template: |-
{task}
task_prompt: ""
ensure_boxed_answers: false

dataset_loader: pipelinerl.domains.fn_calling.dataset.load_problems
dataset_loader_params:
# BFCL v4 test categories (single-turn) - ~2500 samples total
categories:
# Simple (single function call)
- simple_python # 400
- simple_java # 100
- simple_javascript # 50
# Complex (multiple calls)
- multiple # 200
- parallel # 200
- parallel_multiple # 200
# Live (real-world APIs)
- live_simple # 258
- live_multiple # 1053
- live_parallel # 16
- live_parallel_multiple # 24
max_examples_per_category: null
max_examples: null
subset: train # "train" or "test" (90/10 split by default)
train_ratio: 0.9
seed: 42

train_dataset_names:
- fn_calling

test_dataset_names:
- fn_calling_test

environments:
- key: fn_calling
mode: remote
replicas_per_actor: ${world.env_replicas_per_actor}
_target_: pipelinerl.domains.fn_calling.BFCLEnvironment

environment_key: fn_calling

world:
env_replicas_per_actor: 1
47 changes: 47 additions & 0 deletions conf/ifeval.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
defaults:
- base
- _self_

actor:
rollout_policy: pipelinerl.domains.ifeval.generate_ifeval_rollout
system_prompt: ""
task_template: |-
{task}

Be concise and direct in your response. Do not add unnecessary elaboration.
task_prompt: ""
ensure_boxed_answers: false

# IFEval verification options
ifeval_partial_credit: true # If true, give partial reward for some constraints met

dataset_loader: pipelinerl.domains.ifeval.dataset.load_problems
dataset_loader_params:
# AllenAI IF_multi_constraints_upto5 (95k training samples with up to 5 constraints)
max_examples: null
max_constraints: null # Optionally limit max constraints per sample
seed: 42
huggingface_token: ${oc.env:HF_TOKEN, null}
# Train/test split: ~550 held-out for testing (similar to Google IFEval size)
test_size: 550
# Filter out prompts exceeding this token count (max_model_len - max_tokens - buffer)
# With max_model_len=48000 and max_tokens=4096: 48000 - 4096 - 1000 = 42904
max_prompt_tokens: 42000

train_dataset_names:
- ifeval

test_dataset_names:
- ifeval_test

environments:
- key: ifeval
mode: remote
replicas_per_actor: ${world.env_replicas_per_actor}
_target_: pipelinerl.domains.ifeval.IFEvalEnvironment

world:
env_replicas_per_actor: 1

# IFEval verification via RPC to IFEvalEnvironment server
environment_key: ifeval
49 changes: 49 additions & 0 deletions conf/logic.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
defaults:
- base
- _self_

actor:
rollout_policy: pipelinerl.domains.logic.generate_logic_rollout
system_prompt: ""
task_template: |-
{task}

task_prompt: ""
ensure_boxed_answers: false

dataset_loader: pipelinerl.domains.logic.dataset.load_problems
dataset_loader_params:
# PrimeIntellect INTELLECT-3-RL logic domain (11.6k samples, 87 task types)
dataset_id: PrimeIntellect/INTELLECT-3-RL
dataset_config: logic
split: train
subset: train # "train" or "test"
# Fixed test size similar to IFEval (~550 held-out samples)
test_size: 550
# Difficulty filtering using model solve rates
min_difficulty: 0.0
max_difficulty: 1.0
difficulty_column: avg@16_qwen3_4b_instruct_2507
# Skip certain task types (as recommended by i3-logic)
tasks_to_skip: [arc_agi, arc_agi_2, buggy_tables, dyck_language, dyck_language_errors, dyck_language_reasoning_errors]
max_examples: null
seed: 42
huggingface_token: ${oc.env:HF_TOKEN, null}

train_dataset_names:
- logic

test_dataset_names:
- logic_test

environments:
- key: logic
mode: remote
replicas_per_actor: ${world.env_replicas_per_actor}
_target_: pipelinerl.domains.logic.LogicEnvironment

world:
env_replicas_per_actor: 1

# Logic verification via RPC to LogicEnvironment server
environment_key: logic
13 changes: 8 additions & 5 deletions conf/math.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,13 @@ defaults:
actor:
rollout_policy: pipelinerl.domains.math.generate_math_rollout
system_prompt: Please reason step by step, and put your final answer within \boxed{}.
task_template: |-
{task}
environment:
_target_: pipelinerl.domains.math.MathEnvironment
task_template: "{task}"
task_prompt: ""
environments:
- key: math
mode: remote
_target_: pipelinerl.domains.math.MathEnvironment
environment_key: math
dataset_loader: pipelinerl.domains.math.load_datasets

finetune:
Expand All @@ -32,4 +35,4 @@ train_dataset_names:
test_dataset_names:
- aime_2024
- amc_2023
- math_500
- math_500
Loading