-
Notifications
You must be signed in to change notification settings - Fork 50
Multi-Domain #105
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Multi-Domain #105
Changes from 163 commits
cac78d7
df1d846
9735130
bb5e5ca
a1a02bf
e4d0bc4
da43cbc
5b18001
9af7329
599b510
32eb5b8
efaec65
1220f6d
158b2ea
fe8e728
6f9c5cc
455ed42
795e490
68072b1
981cb74
f7e6946
73ca9d1
38ff188
2c5ebfd
40cf648
2c74b77
cdfe57b
a3c4106
7eef15e
cc091ac
7664773
120ba7b
f8d147e
62ad5fb
2d22d5e
52fcb56
9da8f04
3368e69
2831252
cb916c1
a6ad805
2243897
0cbc542
6888e05
4adcd81
a5a6e44
dca8a43
84b6587
8bbca61
1937578
69b5154
fd2fc3b
b139560
8b5c159
b876adb
904c80e
e4017d9
d7935d0
8e2e7b3
5e10988
dac01c1
eb3bacf
f5093bf
27a2a6d
5aea032
02f9294
f6c128c
60169b2
a3de18e
ba360fa
f405321
bba110d
8f60aa2
67ffd60
7ea8744
182ee6e
6bc73eb
63c3035
fa9a9bc
5e9b037
2677ad9
48afae1
00fd6cb
ee61fbf
db19fa8
2879b4c
e16a81a
9d93cf4
28dc0b5
d86c3db
cbf56eb
eafd8d1
cf8e059
72ce0b7
92207ec
eb5df47
360edb8
51fe2dc
fbdb01d
f094e68
a6f7af5
4a21c9c
b2deb7a
711160c
1d345da
ed30afe
e6f39f0
cbefb09
9d36e6c
e4e512e
156f68d
791ff0b
6137469
4c29772
85e58c4
8947b44
711ea8c
5fc0739
c7ac458
86f1cf0
96fa3c8
e4c7c73
9a556e7
1cc881b
eb87d87
5651bdb
b8bc5ab
2e8a908
8b62597
60ef983
97d230f
288bdd1
0164307
ad11d7a
37860f2
9d7213f
5d165ec
e704e56
e6c333f
58bcc4d
9ae6bfa
8209d7b
3d9b12e
a71eeb8
ada52ee
3b0930e
41f9610
dbfdc3a
24a2b1d
492bfcb
30ce103
7ab076a
d13a485
48d15db
fce7011
3e180a7
5a94da6
9aace39
b39e9f3
b8c71c4
dc9dc2f
76a9a84
a423d76
6e54a7f
14cd4f0
45efba8
5ad90c3
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -141,4 +141,3 @@ wandb: | |
| wandb_dir: null | ||
| # Comma-separated list of keywords to tag the run. | ||
| tags: [] | ||
|
|
||
| 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} | ||
| 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 | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Collaborator
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe 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. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. How about resolving And domains with no environments can be hard-coded in their load_datasets scripts |
||
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
Uh oh!
There was an error while loading. Please reload this page.