verifiers 0.2.2.dev26__py3-none-any.whl → 0.2.2.dev28__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- verifiers/v1/__init__.py +2 -0
- verifiers/v1/cli/dashboard/eval.py +9 -3
- verifiers/v1/envs/agentic_judge/env.py +2 -2
- verifiers/v1/legacy.py +2 -1
- verifiers/v1/push.py +6 -4
- verifiers/v1/trace.py +23 -7
- {verifiers-0.2.2.dev26.dist-info → verifiers-0.2.2.dev28.dist-info}/METADATA +1 -1
- {verifiers-0.2.2.dev26.dist-info → verifiers-0.2.2.dev28.dist-info}/RECORD +11 -11
- {verifiers-0.2.2.dev26.dist-info → verifiers-0.2.2.dev28.dist-info}/WHEEL +0 -0
- {verifiers-0.2.2.dev26.dist-info → verifiers-0.2.2.dev28.dist-info}/entry_points.txt +0 -0
- {verifiers-0.2.2.dev26.dist-info → verifiers-0.2.2.dev28.dist-info}/licenses/LICENSE +0 -0
verifiers/v1/__init__.py
CHANGED
|
@@ -107,6 +107,7 @@ from verifiers.v1.trace import (
|
|
|
107
107
|
EvalRunInfo,
|
|
108
108
|
GenerationSpan,
|
|
109
109
|
ModelCall,
|
|
110
|
+
Reward,
|
|
110
111
|
RunInfo,
|
|
111
112
|
TimeSpan,
|
|
112
113
|
TimeSplit,
|
|
@@ -171,6 +172,7 @@ __all__ = [
|
|
|
171
172
|
"Trace",
|
|
172
173
|
"TraceTask",
|
|
173
174
|
"WireTrace",
|
|
175
|
+
"Reward",
|
|
174
176
|
"Episode",
|
|
175
177
|
"WireEpisode",
|
|
176
178
|
"TRACE_VERSION",
|
|
@@ -341,13 +341,19 @@ def _score_segments(traces: list[Trace], source: str) -> str | None:
|
|
|
341
341
|
return None
|
|
342
342
|
segments = []
|
|
343
343
|
for name in names:
|
|
344
|
-
mean = format_mean(
|
|
345
|
-
traces, lambda t, n=name, s=source: getattr(t, s).get(n, 0.0)
|
|
346
|
-
)
|
|
344
|
+
mean = format_mean(traces, lambda t, n=name, s=source: _score(t, s, n))
|
|
347
345
|
segments.append(f"{name} {mean}")
|
|
348
346
|
return " · ".join(segments)
|
|
349
347
|
|
|
350
348
|
|
|
349
|
+
def _score(trace: Trace, source: str, name: str) -> float:
|
|
350
|
+
"""Rewards carry raw score + weight; the breakdown shows the raw score."""
|
|
351
|
+
if source == "rewards":
|
|
352
|
+
reward = trace.rewards.get(name)
|
|
353
|
+
return reward.score if reward is not None else 0.0
|
|
354
|
+
return trace.metrics.get(name, 0.0)
|
|
355
|
+
|
|
356
|
+
|
|
351
357
|
def _breakdown(scored: list[Trace], done: list[Trace]) -> Table | None:
|
|
352
358
|
"""Score rows read the policy view (`scored` — trainable traces); with several
|
|
353
359
|
roles in play they split per role, each role averaging over its OWN traces (no
|
|
@@ -340,8 +340,8 @@ class AgenticJudgeEnv(vf.Env[AgenticJudgeEnvConfig]):
|
|
|
340
340
|
for criterion in criteria:
|
|
341
341
|
solution.record_metric(f"judge/{criterion.name}", scores[criterion.name])
|
|
342
342
|
if self.config.score.task_weight != 1.0:
|
|
343
|
-
for
|
|
344
|
-
|
|
343
|
+
for reward in solution.rewards.values():
|
|
344
|
+
reward.weight *= self.config.score.task_weight
|
|
345
345
|
total = sum(criterion.weight for criterion in criteria)
|
|
346
346
|
reward = sum(c.weight * scores[c.name] for c in criteria) / total
|
|
347
347
|
solution.record_reward("judge", reward, weight=self.config.score.judge_weight)
|
verifiers/v1/legacy.py
CHANGED
|
@@ -37,6 +37,7 @@ from verifiers.v1.trace import (
|
|
|
37
37
|
Error,
|
|
38
38
|
GenerationSpan,
|
|
39
39
|
ModelCall,
|
|
40
|
+
Reward,
|
|
40
41
|
TimeSpan,
|
|
41
42
|
TimeSplit,
|
|
42
43
|
Timing,
|
|
@@ -270,7 +271,7 @@ def rollout_output_to_trace(out: dict, task_idx: int) -> Trace:
|
|
|
270
271
|
data=_to_wire_task(task_idx, out.get("prompt"), out.get("answer")),
|
|
271
272
|
),
|
|
272
273
|
tools=_to_v1_tools(out.get("tool_defs")),
|
|
273
|
-
rewards={"reward": float(out.get("reward") or 0.0)},
|
|
274
|
+
rewards={"reward": Reward(score=float(out.get("reward") or 0.0))},
|
|
274
275
|
metrics={k: float(v) for k, v in (out.get("metrics") or {}).items()},
|
|
275
276
|
info=dict(out.get("info") or {}),
|
|
276
277
|
is_completed=bool(out.get("is_completed", True)),
|
verifiers/v1/push.py
CHANGED
|
@@ -90,9 +90,10 @@ def trace_to_sample(
|
|
|
90
90
|
else None,
|
|
91
91
|
"info": dict(trace.info) or None,
|
|
92
92
|
}
|
|
93
|
-
# Flatten sub-rewards to top-level keys the way v0 does
|
|
94
|
-
|
|
95
|
-
|
|
93
|
+
# Flatten sub-rewards to top-level keys the way v0 does (raw scores, as v0's
|
|
94
|
+
# per-function outputs were); env metrics stay nested.
|
|
95
|
+
for name, reward in trace.rewards.items():
|
|
96
|
+
sample.setdefault(name, reward.score)
|
|
96
97
|
return sample
|
|
97
98
|
|
|
98
99
|
|
|
@@ -127,7 +128,8 @@ def _run_metrics(episodes: list[Episode], traces: list[Trace]) -> dict[str, Any]
|
|
|
127
128
|
sums: dict[str, float] = {}
|
|
128
129
|
counts: dict[str, int] = {}
|
|
129
130
|
for trace in scored:
|
|
130
|
-
for name,
|
|
131
|
+
scores = {name: reward.score for name, reward in trace.rewards.items()}
|
|
132
|
+
for name, value in {**scores, **trace.metrics}.items():
|
|
131
133
|
sums[name] = sums.get(name, 0.0) + value
|
|
132
134
|
counts[name] = counts.get(name, 0) + 1
|
|
133
135
|
n = len(scored)
|
verifiers/v1/trace.py
CHANGED
|
@@ -266,7 +266,7 @@ _NODE_DUMP_EXCLUDE: dict = {
|
|
|
266
266
|
"""Raw tensor fields kept on the msgpack wire but excluded from JSON records."""
|
|
267
267
|
|
|
268
268
|
|
|
269
|
-
TRACE_VERSION =
|
|
269
|
+
TRACE_VERSION = 4
|
|
270
270
|
"""Version of the trace record schema (see `Trace.model_json_schema()`). Bumped on
|
|
271
271
|
breaking shape changes; optional-with-default fields are additive and don't bump it."""
|
|
272
272
|
|
|
@@ -343,6 +343,21 @@ class TraceTask(StrictBaseModel, Generic[DataT]):
|
|
|
343
343
|
"""The (immutable) row being solved."""
|
|
344
344
|
|
|
345
345
|
|
|
346
|
+
class Reward(StrictBaseModel):
|
|
347
|
+
"""One named reward as recorded on the trace: the raw score next to its weight,
|
|
348
|
+
so records keep both readable and the weighted sum stays a derived view."""
|
|
349
|
+
|
|
350
|
+
score: float
|
|
351
|
+
"""The raw value the reward function returned, unweighted."""
|
|
352
|
+
weight: float = 1.0
|
|
353
|
+
"""The multiplier `score` carries in the trace-level `reward` sum."""
|
|
354
|
+
|
|
355
|
+
@property
|
|
356
|
+
def value(self) -> float:
|
|
357
|
+
"""This reward's weighted contribution to the trace-level `reward`."""
|
|
358
|
+
return self.score * self.weight
|
|
359
|
+
|
|
360
|
+
|
|
346
361
|
class Trace(StrictBaseModel, Generic[DataT, StateT, AgentConfigT]):
|
|
347
362
|
id: str = Field(default_factory=lambda: uuid.uuid4().hex)
|
|
348
363
|
"""Unique id for this rollout, auto-generated per trace."""
|
|
@@ -369,8 +384,9 @@ class Trace(StrictBaseModel, Generic[DataT, StateT, AgentConfigT]):
|
|
|
369
384
|
"""Every provider exchange behind the sampled turns, in order: raw wire request/response
|
|
370
385
|
plus per-call timing and errors, linked into `nodes` via `ModelCall.node`."""
|
|
371
386
|
|
|
372
|
-
rewards: dict[str,
|
|
373
|
-
"""
|
|
387
|
+
rewards: dict[str, Reward] = Field(default_factory=dict)
|
|
388
|
+
"""Named rewards from tasks, judges, and the env's `score()` — each keeps its
|
|
389
|
+
raw `score` and `weight`; the trace-level `reward` is their weighted sum."""
|
|
374
390
|
metrics: dict[str, float] = Field(default_factory=dict)
|
|
375
391
|
"""Unweighted metrics from tasks, harnesses, and judges."""
|
|
376
392
|
info: dict[str, Any] = Field(default_factory=dict)
|
|
@@ -400,7 +416,7 @@ class Trace(StrictBaseModel, Generic[DataT, StateT, AgentConfigT]):
|
|
|
400
416
|
|
|
401
417
|
@property
|
|
402
418
|
def reward(self) -> float:
|
|
403
|
-
return sum(self.rewards.values())
|
|
419
|
+
return sum(r.value for r in self.rewards.values())
|
|
404
420
|
|
|
405
421
|
@property
|
|
406
422
|
def error(self) -> Error | None:
|
|
@@ -559,12 +575,12 @@ class Trace(StrictBaseModel, Generic[DataT, StateT, AgentConfigT]):
|
|
|
559
575
|
self.extra_usage.append(response.usage)
|
|
560
576
|
|
|
561
577
|
def record_reward(self, name: str, value: float, weight: float = 1.0) -> None:
|
|
562
|
-
|
|
578
|
+
reward = Reward(score=float(value), weight=float(weight))
|
|
563
579
|
if name in self.rewards:
|
|
564
580
|
logger.warning(
|
|
565
|
-
"reward %r overridden: %s -> %s", name, self.rewards[name],
|
|
581
|
+
"reward %r overridden: %s -> %s", name, self.rewards[name], reward
|
|
566
582
|
)
|
|
567
|
-
self.rewards[name] =
|
|
583
|
+
self.rewards[name] = reward
|
|
568
584
|
|
|
569
585
|
def stamp(self, run: RunInfo | None = None, **info: Any) -> None:
|
|
570
586
|
"""Stamp identity only the consumer knows (the eval CLI / a trainer) onto the
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: verifiers
|
|
3
|
-
Version: 0.2.2.
|
|
3
|
+
Version: 0.2.2.dev28
|
|
4
4
|
Summary: Verifiers: Environments for LLM Reinforcement Learning
|
|
5
5
|
Project-URL: Homepage, https://github.com/primeintellect-ai/verifiers
|
|
6
6
|
Project-URL: Documentation, https://github.com/primeintellect-ai/verifiers
|
|
@@ -167,7 +167,7 @@ verifiers/utils/threaded_sandbox_client.py,sha256=Pbr8MA4FDPEitL6z88S8T1qLJOmtXN
|
|
|
167
167
|
verifiers/utils/tool_utils.py,sha256=gInWZODWQUZN4TyEMuuITyOUm9qlHJxtcvr1zZl_zJs,1020
|
|
168
168
|
verifiers/utils/usage_utils.py,sha256=GPLC0xGY_Obrr8X7huWY-2iODZ7tgX-MtO8WSDN4rXI,3904
|
|
169
169
|
verifiers/utils/version_utils.py,sha256=am3hZLnlaUWTFdllGZR1VMN91hEhiiE8FDmPf1cOG1k,2642
|
|
170
|
-
verifiers/v1/__init__.py,sha256=
|
|
170
|
+
verifiers/v1/__init__.py,sha256=z0yUgI1iVf8znsAtBG2fpRKuwipaQ5yS4PvGhWJbKtE,6859
|
|
171
171
|
verifiers/v1/agent.py,sha256=FP38GsZXuEJe3tJ-U2THpwBf9NWQeo847hWRZoeggNw,31956
|
|
172
172
|
verifiers/v1/decorators.py,sha256=XRMkUQSyvXCYP5fOwzBYV5qEOlxLg6rzYhnhrHHHTIQ,3838
|
|
173
173
|
verifiers/v1/env.py,sha256=w6sHWdWijLRZzhwVyJjadnGtziNqJAPCeMUoNdzHoLg,17712
|
|
@@ -176,9 +176,9 @@ verifiers/v1/errors.py,sha256=Pj5Om8x1fP3TDPQQn6nUCoSPoZRsy2JeBz8pXhpPrDY,6883
|
|
|
176
176
|
verifiers/v1/graph.py,sha256=Mivq5jICUcyK-fhomFTwP4fQn688MXg6-hmdf03aC4Y,27703
|
|
177
177
|
verifiers/v1/harness.py,sha256=Ukzhk7wxSUSVnN4tRAUMfniN9R9MBSNzs2SiT5YcRzQ,10711
|
|
178
178
|
verifiers/v1/judge.py,sha256=ZWvr6uCniSwqzzjKrlyh-lzfCh5q-VyB16W42x0aWlg,9449
|
|
179
|
-
verifiers/v1/legacy.py,sha256=
|
|
179
|
+
verifiers/v1/legacy.py,sha256=8eVGhutQEgJG4qabhph4Xs1VzTWvmMxMn3-Zk-6ViWM,22306
|
|
180
180
|
verifiers/v1/loaders.py,sha256=FdICekH_c9WYkUe0XJCI9AWxL1sJjjzzJPJ7ZJdeyRk,9962
|
|
181
|
-
verifiers/v1/push.py,sha256=
|
|
181
|
+
verifiers/v1/push.py,sha256=VfLESKAlL8WXzfXx6CrqwMJ-CvPTkP-tUf6Rin12V8w,11273
|
|
182
182
|
verifiers/v1/retries.py,sha256=ZQxY6R_FoXooERmhIMZnhY3b2koJOVjaIvkSO9gw53E,5379
|
|
183
183
|
verifiers/v1/rollout.py,sha256=8_LC938Ws9uWFRPz2DDpivttqDALb3Yir7J5wjnsoIE,20332
|
|
184
184
|
verifiers/v1/scoring.py,sha256=I_mtqhTZ195hj2-CB5jzr3BY5GFKgNEvTf331f7Is4k,5740
|
|
@@ -186,7 +186,7 @@ verifiers/v1/session.py,sha256=J6ZPuvsg6vMTJAs9dMUMtfdjCuvp6Hom877DVdKFKlY,6912
|
|
|
186
186
|
verifiers/v1/state.py,sha256=R8tyQv8nsFV2pztrquDqCOa1Mk1fAp3w2GjqUugZwE0,689
|
|
187
187
|
verifiers/v1/task.py,sha256=qKAAF154ykgvrms2Y2Or6kgGVPvBMsFCD6KqX2QOQaU,10912
|
|
188
188
|
verifiers/v1/taskset.py,sha256=PX1-skAVhSpGF07qjxcG0Ctmq1LiMftMxxok-uc8qRY,3939
|
|
189
|
-
verifiers/v1/trace.py,sha256=
|
|
189
|
+
verifiers/v1/trace.py,sha256=OE7vW6sYGjA18JdRJuHM9UiRaq9XkGS0Yv2m7nuvEYs,26619
|
|
190
190
|
verifiers/v1/types.py,sha256=5tZyG4r4bLJ9a14oybHy7bSCpt5X5A17eRwmIszuRo8,9118
|
|
191
191
|
verifiers/v1/acp/__init__.py,sha256=9dwH6fLopNndRmcpRSYC8ghzzMquaLfgh645QM-Dwic,2189
|
|
192
192
|
verifiers/v1/acp/_runner.py,sha256=FqEnHR0Q_YrCt_EuaJqiqTpd2_kFa41FqcEunwOhvTI,6856
|
|
@@ -201,7 +201,7 @@ verifiers/v1/cli/serve.py,sha256=VHzcr2bM8R3XoGEu6WvY1NSQoiBZsk49cVW5AB9N4Kg,266
|
|
|
201
201
|
verifiers/v1/cli/validate.py,sha256=r3ByzcLc_DFkvlCB7NanYRnBSOIi5EU9cUANy74l3T0,9547
|
|
202
202
|
verifiers/v1/cli/dashboard/__init__.py,sha256=v-baMxQuWxOCsbU7-p_jj2Q9BUnTN-TWi1q2hK6rU2s,198
|
|
203
203
|
verifiers/v1/cli/dashboard/base.py,sha256=kUP93zJSIVLptSbnWX6MOy8kGg63fpeAzPqakCpPyDc,3547
|
|
204
|
-
verifiers/v1/cli/dashboard/eval.py,sha256=
|
|
204
|
+
verifiers/v1/cli/dashboard/eval.py,sha256=nmaWIq-4ormHZWjwlWm1QSFo383Sc4VFEkw9rYnpi00,34357
|
|
205
205
|
verifiers/v1/cli/dashboard/replay.py,sha256=CvRVaf0dUum5v0IzPQbFPPikBQmTrkMeaunGfVMTWHc,2755
|
|
206
206
|
verifiers/v1/cli/dashboard/validate.py,sha256=rLsQ_31DjTIZpC_VO7zSG41ncUEBxqCx8mL9nTnGiMc,3650
|
|
207
207
|
verifiers/v1/cli/eval/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -236,7 +236,7 @@ verifiers/v1/dialects/chat.py,sha256=DFvjmIW86jZUMWuz-hOqzxC6tiiFibiAzNEJ3JkpvjU
|
|
|
236
236
|
verifiers/v1/dialects/responses.py,sha256=vVgeT7-aWjtfED2IKlDwTATKn_AQZruHNL6mkFTTZTU,13548
|
|
237
237
|
verifiers/v1/envs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
238
238
|
verifiers/v1/envs/agentic_judge/__init__.py,sha256=X7vQbbbfmJ_j-mJEfBkuB4a8QUPkUYkpG7yp0xYOEmg,279
|
|
239
|
-
verifiers/v1/envs/agentic_judge/env.py,sha256=
|
|
239
|
+
verifiers/v1/envs/agentic_judge/env.py,sha256=_zEKG9i3LsOVIQWULXYAHpbmrQNPWBRayJx2yjvtPbQ,15307
|
|
240
240
|
verifiers/v1/envs/best_of_n/__init__.py,sha256=mubASiwXMNIhnQFDccNAc7yZ0OFsOVK8hH8WIx9b2A4,119
|
|
241
241
|
verifiers/v1/envs/best_of_n/env.py,sha256=KEUJBCVqblnXP_lEwm3mjGdaikBMkecz8UjOFPBhxc0,1987
|
|
242
242
|
verifiers/v1/envs/single_agent/__init__.py,sha256=r0edAc_6gtHBhPzeBGVcdHZZqSdCPZnLMje6eVgyz5U,138
|
|
@@ -327,8 +327,8 @@ verifiers/v1/utils/logging.py,sha256=OcMHA6NsYux3oIzjPuI95rDWmFBHNcHDjZeNIhXTX-Y
|
|
|
327
327
|
verifiers/v1/utils/memory.py,sha256=ZkIvGk6uITAH5sKon65LifKPbvZr8mJ__PVc23FZpOQ,1835
|
|
328
328
|
verifiers/v1/utils/sampling.py,sha256=JczGzBn6s3wsIrSY2Hy3hE8m6NreNgsNzhSjDikQqX0,1037
|
|
329
329
|
verifiers/v1/utils/version.py,sha256=75ZtI2NHBmlb52KpcKLUpiSXp8q4bASr7uKeXoCKlT8,1582
|
|
330
|
-
verifiers-0.2.2.
|
|
331
|
-
verifiers-0.2.2.
|
|
332
|
-
verifiers-0.2.2.
|
|
333
|
-
verifiers-0.2.2.
|
|
334
|
-
verifiers-0.2.2.
|
|
330
|
+
verifiers-0.2.2.dev28.dist-info/METADATA,sha256=HaWApbU7oXTVKEbSZ0uIB1uTDVG2dBCkpHUDUIwp_04,4540
|
|
331
|
+
verifiers-0.2.2.dev28.dist-info/WHEEL,sha256=lCkmxWfQsSc9CfIClYeavTdQeEX2toPqufh9gI35EQA,87
|
|
332
|
+
verifiers-0.2.2.dev28.dist-info/entry_points.txt,sha256=dF82JUYEFslR1AOW8LZfuBWeZeQoyX4wCRrduklg8-I,551
|
|
333
|
+
verifiers-0.2.2.dev28.dist-info/licenses/LICENSE,sha256=v0RrUsdV3IDoZhrRce297IXS3xMHNJ-_LdLpFAUWb9k,1072
|
|
334
|
+
verifiers-0.2.2.dev28.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|