Skip to content

Commit 65bde93

Browse files
committed
Send display config in Prime monitor registration
1 parent 92dac93 commit 65bde93

2 files changed

Lines changed: 68 additions & 1 deletion

File tree

src/prime_rl/utils/monitor/prime.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,10 +182,16 @@ def _register_run(self, config: PrimeMonitorConfig, run_config: BaseConfig | Non
182182
environments = getattr(run_config, "env", None) if run_config else None
183183
wandb = getattr(run_config, "wandb", None) if run_config else None
184184

185-
payload: dict = {
185+
payload: dict[str, Any] = {
186186
"base_model": model.name if model else "unknown",
187187
"max_steps": getattr(run_config, "max_steps", None) or 0,
188188
}
189+
if run_config:
190+
payload["run_config"] = run_config.model_dump(exclude_none=True, mode="json")
191+
for field in ("batch_size", "rollouts_per_example", "seq_len"):
192+
value = getattr(run_config, field, None)
193+
if value is not None:
194+
payload[field] = value
189195
if config.run_name:
190196
payload["name"] = config.run_name
191197
if team_id:

tests/unit/utils/test_prime_monitor.py

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,67 @@ def test_rollouts_to_parquet_bytes_skips_rollouts_without_trajectory():
116116
assert rows[0]["sample_id"] == 0
117117

118118

119+
def test_register_run_sends_display_config_and_run_config(monkeypatch):
120+
run_config_dump = {
121+
"max_steps": 30,
122+
"batch_size": 64,
123+
"rollouts_per_example": 16,
124+
"seq_len": 4096,
125+
}
126+
run_config = types.SimpleNamespace(
127+
model=types.SimpleNamespace(name="PrimeIntellect/Qwen3-0.6B-Reverse-Text-SFT"),
128+
env=[types.SimpleNamespace(id="primeintellect/reverse-text")],
129+
wandb=types.SimpleNamespace(project="prime-rl-e2e"),
130+
max_steps=30,
131+
batch_size=64,
132+
rollouts_per_example=16,
133+
seq_len=4096,
134+
model_dump=MagicMock(return_value=run_config_dump),
135+
)
136+
monitor = _make_monitor(
137+
api_key="pit-test",
138+
base_url="https://api.primeintellect.ai/api/v1/rft",
139+
logger=MagicMock(),
140+
)
141+
config = types.SimpleNamespace(
142+
base_url="https://api.primeintellect.ai/api/v1/rft",
143+
api_key_var="PRIME_API_KEY",
144+
team_id="team-1",
145+
frontend_url=None,
146+
run_name="e2e-run",
147+
)
148+
response = MagicMock(status_code=201)
149+
response.json.return_value = {"run": {"id": "run-123"}}
150+
post = MagicMock(return_value=response)
151+
monkeypatch.setattr("prime_rl.utils.monitor.prime.httpx.post", post)
152+
153+
run_id = monitor._register_run(config, run_config)
154+
155+
assert run_id == "run-123"
156+
run_config.model_dump.assert_called_once_with(exclude_none=True, mode="json")
157+
post.assert_called_once_with(
158+
"https://api.primeintellect.ai/api/v1/rft/external-runs",
159+
headers={
160+
"Authorization": "Bearer pit-test",
161+
"x-api-key": "pit-test",
162+
"Content-Type": "application/json",
163+
},
164+
json={
165+
"base_model": "PrimeIntellect/Qwen3-0.6B-Reverse-Text-SFT",
166+
"max_steps": 30,
167+
"run_config": run_config_dump,
168+
"batch_size": 64,
169+
"rollouts_per_example": 16,
170+
"seq_len": 4096,
171+
"name": "e2e-run",
172+
"team_id": "team-1",
173+
"environments": [{"id": "primeintellect/reverse-text"}],
174+
"wandb_project": "prime-rl-e2e",
175+
},
176+
timeout=30,
177+
)
178+
179+
119180
def test_api_headers_include_bearer_and_x_api_key():
120181
monitor = _make_monitor(api_key="pit-test")
121182

0 commit comments

Comments
 (0)