verifiers 0.3.2.dev33__py3-none-any.whl → 0.3.2.dev35__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 CHANGED
@@ -116,7 +116,6 @@ from verifiers.v1.types import (
116
116
  ContentPart,
117
117
  ImageUrlContentPart,
118
118
  ImageUrlSource,
119
- KeptTokens,
120
119
  Message,
121
120
  MessageContent,
122
121
  Messages,
@@ -124,6 +123,7 @@ from verifiers.v1.types import (
124
123
  Response,
125
124
  Sampling,
126
125
  SamplingConfig,
126
+ SamplingMask,
127
127
  SystemMessage,
128
128
  TextContentPart,
129
129
  Tool,
@@ -249,7 +249,7 @@ __all__ = [ # noqa: RUF022 - grouped by public API area
249
249
  "MessageNode",
250
250
  "Branch",
251
251
  "TurnTokens",
252
- "KeptTokens",
252
+ "SamplingMask",
253
253
  "Timing",
254
254
  "TimeSpan",
255
255
  "TimeSplit",
@@ -23,9 +23,9 @@ from verifiers.v1.graph import PendingTurn
23
23
  from verifiers.v1.types import (
24
24
  AssistantMessage,
25
25
  FinishReason,
26
- KeptTokens,
27
26
  Response,
28
27
  SamplingConfig,
28
+ SamplingMask,
29
29
  Tool,
30
30
  ToolCall,
31
31
  TurnTokens,
@@ -161,8 +161,8 @@ def response_from_generate(
161
161
  multi_modal_data=result.get("multi_modal_data"),
162
162
  mm_token_type_id_map=mm_token_type_id_map,
163
163
  routed_experts=result.get("routed_experts"),
164
- kept_tokens=KeptTokens(**kept)
165
- if (kept := result.get("kept_tokens"))
164
+ sampling_mask=SamplingMask.from_sampling_mask(mask)
165
+ if (mask := result.get("sampling_mask"))
166
166
  else None,
167
167
  ),
168
168
  )
verifiers/v1/graph.py CHANGED
@@ -35,9 +35,9 @@ from renderers.base import MultiModalData, PlaceholderRange, RenderedTokens
35
35
  from verifiers.v1.semantic import ParentLink
36
36
  from verifiers.v1.types import (
37
37
  AssistantMessage,
38
- KeptTokens,
39
38
  Message,
40
39
  Response,
40
+ SamplingMask,
41
41
  TextContentPart,
42
42
  Tool,
43
43
  ToolMessage,
@@ -141,12 +141,12 @@ class MessageNode(BaseModel):
141
141
  the turn's `generate` payload by `_attribute_routed_experts`; `Branch.routed_experts`
142
142
  concatenates these along the path into the trainer's router-replay input. Rides the wire as
143
143
  a raw-bytes `__nd__` dict; kept off disk by the dump-site `exclude` in prime-rl."""
144
- kept_tokens: SkipJsonSchema[KeptTokens | None] = None
145
- """Kept-set sampling masks for this node's sampled tokens, decoded: `ids` flat int32
146
- in position order, `counts` the per-token kept-set sizes (aligned with `logprobs`;
147
- 0 = no mask). Assistant nodes only; consumed via `Branch.kept_tokens` for
148
- sampling-replay training. Rides the wire as raw-bytes `__nd__` dicts; kept off disk
149
- by the dump-site `exclude` in prime-rl."""
144
+ sampling_mask: SkipJsonSchema[SamplingMask | None] = None
145
+ """Sampling masks for this node's sampled tokens.
146
+
147
+ `ids` stores the flat token ids and `counts` stores each token's row size. Assistant
148
+ nodes only. The arrays serialize as raw-byte `__nd__` dictionaries.
149
+ """
150
150
 
151
151
  model_config = ConfigDict(arbitrary_types_allowed=True)
152
152
 
@@ -208,27 +208,26 @@ class MessageNode(BaseModel):
208
208
  return _decode_ndarray(value)
209
209
  raise TypeError(f"cannot build ndarray field from {type(value).__name__}")
210
210
 
211
- @field_serializer("kept_tokens")
212
- def serialize_kept_tokens(self, kept: KeptTokens | None) -> dict | None:
213
- """`KeptTokens` -> dict of raw-bytes `__nd__` entries so the arrays ride the wire."""
214
- if kept is None:
211
+ @field_serializer("sampling_mask")
212
+ def serialize_sampling_mask(self, mask: SamplingMask | None) -> dict | None:
213
+ if mask is None:
215
214
  return None
216
215
  return {
217
- "ids": _encode_ndarray(kept.ids),
218
- "counts": _encode_ndarray(kept.counts),
216
+ "ids": _encode_ndarray(mask.ids),
217
+ "counts": _encode_ndarray(mask.counts),
219
218
  }
220
219
 
221
- @field_validator("kept_tokens", mode="before")
220
+ @field_validator("sampling_mask", mode="before")
222
221
  @classmethod
223
- def deserialize_kept_tokens(cls, value: Any) -> KeptTokens | None:
224
- if value is None or isinstance(value, KeptTokens):
222
+ def deserialize_sampling_mask(cls, value: Any) -> SamplingMask | None:
223
+ if value is None or isinstance(value, SamplingMask):
225
224
  return value
226
225
  if isinstance(value, dict):
227
- return KeptTokens(
226
+ return SamplingMask(
228
227
  ids=_decode_ndarray(value["ids"]),
229
228
  counts=_decode_ndarray(value["counts"]),
230
229
  )
231
- raise TypeError(f"cannot build KeptTokens from {type(value).__name__}")
230
+ raise TypeError(f"cannot build SamplingMask from {type(value).__name__}")
232
231
 
233
232
 
234
233
  def _canonical_tool_arguments(arguments: str) -> str:
@@ -612,21 +611,18 @@ def _attribute_routed_experts(
612
611
  off = end
613
612
 
614
613
 
615
- def _attribute_kept_tokens(
616
- trace: Trace, assistant_id: int, payload: KeptTokens | None
614
+ def _attribute_sampling_mask(
615
+ trace: Trace, assistant_id: int, payload: SamplingMask | None
617
616
  ) -> None:
618
- """Attach this turn's kept-set sampling masks to the assistant node (the payload
619
- covers exactly the turn's completion tokens, so no path arithmetic). A payload
620
- that doesn't line up with the node's sampled tokens is dropped, not misaligned."""
617
+ """Attach a completion-aligned sampling mask to the assistant node."""
621
618
  if payload is None:
622
619
  return
623
- counts = np.frombuffer(binascii.a2b_base64(payload.counts), dtype=np.int32)
624
- ids = np.frombuffer(binascii.a2b_base64(payload.ids), dtype=np.int32)
625
620
  node = trace.nodes[assistant_id]
626
- if len(counts) != sum(node.mask) or int(counts.sum()) != len(ids):
621
+ if len(payload.counts) != sum(node.mask) or int(payload.counts.sum()) != len(
622
+ payload.ids
623
+ ):
627
624
  return
628
- # Own the buffers — the payload views reference the turn's response bytes.
629
- node.kept_tokens = KeptTokens(ids=ids.copy(), counts=counts.copy())
625
+ node.sampling_mask = payload
630
626
 
631
627
 
632
628
  def _commit_turn(turn: PendingTurn, response: Response) -> int:
@@ -775,9 +771,10 @@ def _commit_turn(turn: PendingTurn, response: Response) -> int:
775
771
  trace, new_node_ids, path_len, tokens.routed_experts if tokens else None
776
772
  )
777
773
 
778
- # Attribute this turn's kept-set sampling masks onto the assistant node (they are
779
- # completion-aligned, so only the sampled node carries them).
780
- _attribute_kept_tokens(trace, assistant_id, tokens.kept_tokens if tokens else None)
774
+ # Sampling masks are completion-aligned, so only the sampled node carries them.
775
+ _attribute_sampling_mask(
776
+ trace, assistant_id, tokens.sampling_mask if tokens else None
777
+ )
781
778
 
782
779
  return assistant_id
783
780
 
@@ -8,6 +8,7 @@ from verifiers.v1.configs.harness import HarnessConfig
8
8
  from verifiers.v1.harness import Harness
9
9
  from verifiers.v1.harnesses.utils.launch import (
10
10
  CHAT_PROGRAM_SOURCE,
11
+ MCP_CHAT_PROGRAM_SOURCE,
11
12
  launch_chat_program,
12
13
  )
13
14
  from verifiers.v1.runtimes import ProgramResult, Runtime
@@ -121,6 +122,7 @@ class BashHarness(Harness[BashHarnessConfig]):
121
122
  mcp_urls,
122
123
  system_prompt,
123
124
  prompt,
125
+ source_with_mcp=MCP_CHAT_PROGRAM_SOURCE,
124
126
  extra_args=args,
125
127
  env=env,
126
128
  activate=False,
@@ -3,6 +3,7 @@ from verifiers.v1.configs.harness import HarnessConfig
3
3
  from verifiers.v1.harness import Harness
4
4
  from verifiers.v1.harnesses.utils.launch import (
5
5
  CHAT_PROGRAM_SOURCE,
6
+ MCP_CHAT_PROGRAM_SOURCE,
6
7
  launch_chat_program,
7
8
  )
8
9
  from verifiers.v1.runtimes import ProgramResult, Runtime
@@ -46,4 +47,5 @@ class NullHarness(Harness[NullHarnessConfig]):
46
47
  mcp_urls,
47
48
  system_prompt,
48
49
  prompt,
50
+ source_with_mcp=MCP_CHAT_PROGRAM_SOURCE,
49
51
  )
@@ -24,14 +24,13 @@ def bundle_program(program: str, *modules: ModuleType) -> str:
24
24
  # The shared Null/Bash chat program is the utils modules themselves: `core` ends with
25
25
  # the `__main__` entry point, so the program text is only the script metadata. Secrets
26
26
  # use argv so tools do not inherit them.
27
- CHAT_PROGRAM_SOURCE = bundle_program(
27
+ CHAT_PROGRAM = (
28
28
  '# /// script\n# requires-python = ">=3.10"\n'
29
29
  '# dependencies = ["openai", "mcp==2.0.0", "httpx", "httpx2", "tenacity"]\n'
30
- "# ///\n",
31
- mcp,
32
- compaction,
33
- core,
30
+ "# ///\n"
34
31
  )
32
+ CHAT_PROGRAM_SOURCE = bundle_program(CHAT_PROGRAM, compaction, core)
33
+ MCP_CHAT_PROGRAM_SOURCE = bundle_program(CHAT_PROGRAM, mcp, compaction, core)
35
34
 
36
35
 
37
36
  async def launch_chat_program(
@@ -46,6 +45,7 @@ async def launch_chat_program(
46
45
  system_prompt: str | None,
47
46
  prompt: str | Messages | None,
48
47
  *,
48
+ source_with_mcp: str | None = None,
49
49
  extra_args: Sequence[str] = (),
50
50
  env: dict[str, str] | None = None,
51
51
  activate: bool = True,
@@ -60,6 +60,7 @@ async def launch_chat_program(
60
60
  if system_prompt:
61
61
  args.append(f"--system-prompt={system_prompt}")
62
62
  if mcp_urls:
63
+ source = source_with_mcp or source
63
64
  args.append(
64
65
  "--mcp-config="
65
66
  + json.dumps(
verifiers/v1/trace.py CHANGED
@@ -29,10 +29,10 @@ from verifiers.v1.task import DataT, WireTaskData
29
29
  from verifiers.v1.types import (
30
30
  AssistantMessage,
31
31
  FinishReason,
32
- KeptTokens,
33
32
  Message,
34
33
  Messages,
35
34
  Sampling,
35
+ SamplingMask,
36
36
  Tool,
37
37
  ToolMessage,
38
38
  Usage,
@@ -48,7 +48,7 @@ EXCLUDE_FIELDS: dict = {
48
48
  "__all__": {
49
49
  "multi_modal_data",
50
50
  "routed_experts",
51
- "kept_tokens",
51
+ "sampling_mask",
52
52
  }
53
53
  }
54
54
  }
@@ -343,28 +343,25 @@ class Branch(BaseModel):
343
343
  return merged if merged.shape[0] == total else None
344
344
 
345
345
  @property
346
- def kept_tokens(self) -> KeptTokens | None:
347
- """int32 kept-set `counts` aligned 1:1 with `token_ids` plus flat `ids` in
348
- position order; partial data scatters as 0 counts, no data returns None."""
349
- if all(n.kept_tokens is None for n in self.nodes):
346
+ def sampling_mask(self) -> SamplingMask | None:
347
+ """Sampling masks aligned to this branch's token ids."""
348
+ if all(n.sampling_mask is None for n in self.nodes):
350
349
  return None
351
- # `_attribute_kept_tokens` validates counts/ids against the node's sampled
352
- # tokens before setting the field, so this is a straight scatter+concat
353
- # (a corrupted node would fail loudly on the scatter shape mismatch).
350
+ # Attribution validates each mask against the node's sampled positions.
354
351
  ids_parts: list[np.ndarray] = []
355
352
  counts_parts: list[np.ndarray] = []
356
353
  for node in self.nodes:
357
354
  counts = np.zeros(len(node.mask), dtype=np.int32)
358
- if node.kept_tokens is not None and len(node.kept_tokens.counts):
359
- counts[np.nonzero(node.mask)[0]] = node.kept_tokens.counts
360
- ids_parts.append(node.kept_tokens.ids)
355
+ if node.sampling_mask is not None and len(node.sampling_mask.counts):
356
+ counts[np.nonzero(node.mask)[0]] = node.sampling_mask.counts
357
+ ids_parts.append(node.sampling_mask.ids)
361
358
  counts_parts.append(counts)
362
359
  ids = (
363
360
  np.concatenate(ids_parts).astype(np.int32, copy=False)
364
361
  if ids_parts
365
362
  else np.zeros(0, dtype=np.int32)
366
363
  )
367
- return KeptTokens(ids=ids, counts=np.concatenate(counts_parts))
364
+ return SamplingMask(ids=ids, counts=np.concatenate(counts_parts))
368
365
 
369
366
  @property
370
367
  def usage(self) -> Usage | None:
verifiers/v1/types.py CHANGED
@@ -2,6 +2,7 @@ from collections.abc import Iterable
2
2
  from dataclasses import dataclass
3
3
  from typing import Annotated, Any, Literal
4
4
 
5
+ import numpy as np
5
6
  from pydantic import AliasChoices, BaseModel, ConfigDict, Field
6
7
  from renderers.base import MultiModalData
7
8
  from typing_extensions import TypedDict
@@ -184,16 +185,30 @@ class RoutedExperts(TypedDict):
184
185
 
185
186
 
186
187
  @dataclass
187
- class KeptTokens:
188
- """Kept-set sampling masks for sampling replay: `ids` (every kept set concatenated
189
- in position order) and `counts` (kept-set size per completion token; 0 = no usable
190
- mask). Base64 blobs straight off the `generate` response on the `TurnTokens`
191
- carrier; decoded to flat int32 arrays on `MessageNode` (`len(ids) == sum(counts)`,
192
- row boundaries recovered from `counts`)."""
188
+ class SamplingMask:
189
+ """Sampling masks stored as flat int32 `ids` and `counts` arrays.
190
+
191
+ Each row contains the token ids that survived sampling filters for one completion
192
+ token. Row boundaries are recovered from `counts`.
193
+ """
193
194
 
194
195
  ids: Any
195
196
  counts: Any
196
197
 
198
+ @classmethod
199
+ def from_sampling_mask(cls, sampling_mask: list[list[int]]) -> "SamplingMask":
200
+ counts = np.fromiter(
201
+ (len(row) for row in sampling_mask),
202
+ dtype=np.int32,
203
+ count=len(sampling_mask),
204
+ )
205
+ ids = (
206
+ np.concatenate([np.asarray(row, dtype=np.int32) for row in sampling_mask])
207
+ if int(counts.sum())
208
+ else np.empty(0, dtype=np.int32)
209
+ )
210
+ return cls(ids=ids, counts=counts)
211
+
197
212
 
198
213
  class TurnTokens(BaseModel):
199
214
  """Training tokens from renderer tokenization or provider-returned token IDs."""
@@ -221,11 +236,9 @@ class TurnTokens(BaseModel):
221
236
  # per token), attributed per node by the turn's `commit` into `MessageNode.routed_experts`,
222
237
  # then dropped. None unless the engine ran with `enable_return_routed_experts`.
223
238
  routed_experts: RoutedExperts | None = Field(default=None, exclude=True)
224
- # Transient carrier (excluded): the kept-set sampling masks from `generate` (token ids
225
- # surviving top-p/top-k truncation, per completion token), attributed to the assistant
226
- # node by the turn's `commit`, then dropped. None unless the engine ran with
227
- # `enable_return_kept_tokens`.
228
- kept_tokens: KeptTokens | None = Field(default=None, exclude=True)
239
+ # Transient carrier (excluded): per-completion-token sampling masks,
240
+ # attributed to the assistant node by the turn's `commit`, then dropped.
241
+ sampling_mask: SamplingMask | None = Field(default=None, exclude=True)
229
242
 
230
243
 
231
244
  class Response(BaseModel):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: verifiers
3
- Version: 0.3.2.dev33
3
+ Version: 0.3.2.dev35
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
@@ -37,7 +37,7 @@ Requires-Dist: prime-sandboxes>=0.2.39
37
37
  Requires-Dist: prime-tunnel>=0.1.8
38
38
  Requires-Dist: pydantic>=2.12.3
39
39
  Requires-Dist: pyzmq>=27.1.0
40
- Requires-Dist: renderers[multimodal]>=0.1.11
40
+ Requires-Dist: renderers[multimodal]>=0.1.12.dev2
41
41
  Requires-Dist: rich>=11.0.0
42
42
  Requires-Dist: tenacity>=8.5.0
43
43
  Requires-Dist: tomli-w>=1.0.0
@@ -1,10 +1,10 @@
1
1
  verifiers/__init__.py,sha256=yDYsckVQbUkwoh9mU_hBeCLGvS_aWgAxuoNm5LxQpDI,517
2
- verifiers/v1/__init__.py,sha256=AYjjpOBfpSlWZRN51V1KaxMYMBWSZhBEIOzvNk23pxg,8348
2
+ verifiers/v1/__init__.py,sha256=qJKOsiUADKX4C1tMKsAPQXiJMo9-80FNeyPpAyRVshY,8352
3
3
  verifiers/v1/agent.py,sha256=QvP7jJMR1NQEzAdcqSxcPRgYYTZYt6gxst3vxmXymOE,32384
4
4
  verifiers/v1/env.py,sha256=CEhzjojhg5jqbOYruUnc5U7TtgDHDSx8NiiFA0qfbt8,18234
5
5
  verifiers/v1/episode.py,sha256=uStvI4WqgJT50hmHIB55m5B-ASqqLz-fZ-ynBz9uzEY,5474
6
6
  verifiers/v1/errors.py,sha256=uQySmCUrjDYFkBIii1vBFPiEcPFPQZ9EGpas_6HvcQI,5279
7
- verifiers/v1/graph.py,sha256=y8B9mW-8BUEs0B7vg7YEU1WblfsgagIHmDCK0MWujSQ,36193
7
+ verifiers/v1/graph.py,sha256=F07EZIti0AspEQ-0R0Cg_E8wJeKRlBHP4CCWytSL_8Q,35496
8
8
  verifiers/v1/harness.py,sha256=ziECqEBWV34UWbLlxrkhY6MwkbVYkoXBOoaY7mZxwTs,14753
9
9
  verifiers/v1/judge.py,sha256=Pvr0C41ah1qkNSZ0WXdkDvBMfv5YSfY1REHncwlJ8cg,9346
10
10
  verifiers/v1/rollout.py,sha256=hoKGn1CbShbyjEM9PgYq8pdKgoC91VebTkBSgUHLtiE,23978
@@ -13,8 +13,8 @@ verifiers/v1/session.py,sha256=xM7JJJVJACk0JfH9RAN1Ts8gJJKr2tGGRiIgQTrdieY,18692
13
13
  verifiers/v1/state.py,sha256=EckF2bWp-vV4b1jYJ9sLI5xrfGuI5spIgYYwW926toI,595
14
14
  verifiers/v1/task.py,sha256=vaVkBu00riiNU1Ke4NeeY2NQTXxOguz9d6NLe55hO_Q,11468
15
15
  verifiers/v1/taskset.py,sha256=fp2E0IEhL_Ybj9cegZwljfTmW27p_30zTWHFKw_kXE4,4374
16
- verifiers/v1/trace.py,sha256=Adj9iR7ilLE0UscNMiiQTt3NMPPFPx1wpYP17UVr1Bc,29051
17
- verifiers/v1/types.py,sha256=a1wqL8T7KQg9WxkaDIZpmOyU6xT2VeSr1K4SWiW8ef4,9660
16
+ verifiers/v1/trace.py,sha256=bB-rp2Sqz3vM27QdcXJxcG9fAq0sQR3OAniLYO1-sJk,28808
17
+ verifiers/v1/types.py,sha256=PH1SxRWXOjPCgQD9aZgM18_bECvFSNQ25gkCbulmTKU,9857
18
18
  verifiers/v1/acp/__init__.py,sha256=wUPZVYBFjJuOnIIoYONBFuA04A1DJf_dOyKY3QwK37Q,12722
19
19
  verifiers/v1/acp/runner.py,sha256=gMXFmsVg2qD0Zhrx7kvC6Me2Z-wsfBamRIO0i45UW8g,11097
20
20
  verifiers/v1/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -39,7 +39,7 @@ verifiers/v1/clients/__init__.py,sha256=Ysig0tE_0E4Jsfgfes1XHN-fK1s_RCXdqZD6E7lK
39
39
  verifiers/v1/clients/base.py,sha256=PoDw4GMqrfuPTFVK6n2jDmlD0_lJ5zTrYcNio5yq6K8,1691
40
40
  verifiers/v1/clients/client.py,sha256=zqC_AkiD9pl0kxxIbupNiehbS-YnVdp3EMZ0LOHTd8U,3125
41
41
  verifiers/v1/clients/eval.py,sha256=cJucyUFsbF1JlG8nF0Tlw2EBMSoAF0YMklgYiOSoNpg,8322
42
- verifiers/v1/clients/train.py,sha256=ZNbEU8WPZ6xI1hho7MiIjleZOswt2lOUGkIUQqpe8gM,18803
42
+ verifiers/v1/clients/train.py,sha256=hzVhZpZ8LNKD5iEtwy-VVZDmcivHY28q8T3zAfblNwU,18828
43
43
  verifiers/v1/configs/__init__.py,sha256=X7u6X7B3ieD1HZl79Tv1kg-yPHbT0QLvAebaGqxVtvA,317
44
44
  verifiers/v1/configs/agent.py,sha256=L5P6ombAi4U5wwsspMHAuM8111sB9AVdm8q6B5iV1lw,3251
45
45
  verifiers/v1/configs/client.py,sha256=E7ZxeWBFV_AP8MyfxXncTZs-Yn-QKdDS57HCAzqVTrQ,4437
@@ -82,7 +82,7 @@ verifiers/v1/gepa/runner.py,sha256=fGEyFzejdQKBzBbvdiTDHV3JtRhXMXMGSBU5y8C8i3w,6
82
82
  verifiers/v1/harnesses/__init__.py,sha256=0FVi-mPF36fF0vpLY4H2vbK3U_om1Svz3KgJ3i-phs0,1918
83
83
  verifiers/v1/harnesses/node.py,sha256=_-7NofTl-TNuwgEg8qxrD28shlQuyBWgiVHwCCwbdVo,2410
84
84
  verifiers/v1/harnesses/bash/__init__.py,sha256=IAV4eMMqDHSl-9ANb0Q3kxmBZ22SeHZFBM448X4gQio,140
85
- verifiers/v1/harnesses/bash/harness.py,sha256=nsjLKFMGFSya4s9fMHiNVrO92RRCTS3VHqTK3rv3AFA,5233
85
+ verifiers/v1/harnesses/bash/harness.py,sha256=22c2Pn4TX-ftbqeFO1tOTbAij3RT19V2R88ph098jjE,5315
86
86
  verifiers/v1/harnesses/browser_use/__init__.py,sha256=yxm2IG5TDLadxZEkX8SL26XWbcPcODXcrJfPfm1GqwU,171
87
87
  verifiers/v1/harnesses/browser_use/harness.py,sha256=eGdLDRbTF8hg4NUwU1jVJcsUei0Y-gTqbGcj3eFJ7XI,4926
88
88
  verifiers/v1/harnesses/browser_use/program.py,sha256=3dSFHSDIW3R5ZejV23sXReEKnGQjvPAAdzU-N2RrHpw,9822
@@ -99,7 +99,7 @@ verifiers/v1/harnesses/mini_swe_agent/__init__.py,sha256=1OBu2Y-XqL72-dGhFdgB6sr
99
99
  verifiers/v1/harnesses/mini_swe_agent/harness.py,sha256=7HHismhmfCtahlLtQdQyp_fTKidHfco-MdeWp7B9xCo,2522
100
100
  verifiers/v1/harnesses/mini_swe_agent/program.py,sha256=Beej-JLIgSqnqIqB746oKU6kJYcynvppIbmwGa3nJJ0,167
101
101
  verifiers/v1/harnesses/null/__init__.py,sha256=XDeKOPeoXUQi9US9_Z3_yH9YaZ4EiOMKJmUtNNdtD7s,127
102
- verifiers/v1/harnesses/null/harness.py,sha256=Bq19j8Bh_d4VvpFx9nwv6BKnG1tKweEk-2BSmaXWLkU,1330
102
+ verifiers/v1/harnesses/null/harness.py,sha256=RWj2I7auxYe4dJ885DhqH1MN15iUS-TKT7-gEWNrgmM,1412
103
103
  verifiers/v1/harnesses/openclaw/__init__.py,sha256=kNyfPB1sGwEf4K3mTfKN0VEyxun3SGvNpvArVKvH-x8,160
104
104
  verifiers/v1/harnesses/openclaw/harness.py,sha256=LcdfnP_wYvWUQWIt6d4sE0TnXaxt5Ne5r_f7R0lKkAc,9535
105
105
  verifiers/v1/harnesses/pi/__init__.py,sha256=1mSnzOf-RdEchdeg6IHtcdobG5KIpAhuTdUIgsCIn74,117
@@ -116,7 +116,7 @@ verifiers/v1/harnesses/terminus_2/program.py,sha256=X8MZdyItU3gbXGXnGOlJ9LWcUTnq
116
116
  verifiers/v1/harnesses/utils/__init__.py,sha256=eTS-Ft2HwoLiYn5u1t_KueLmaZB_W12cdYmcVsE-G5A,364
117
117
  verifiers/v1/harnesses/utils/compaction.py,sha256=DeY6CYLEsv7-vJm26sT2mRaPHu3W2ywiZhvFr_pi6Hg,10495
118
118
  verifiers/v1/harnesses/utils/core.py,sha256=_FYeBvp506JWsya0vKYbka9ZYqUwJC7Gm7fnwammwug,14993
119
- verifiers/v1/harnesses/utils/launch.py,sha256=vCDrrT64LgSoBWCCi8n7Y0eXyNBkTcv7_Wvf0h-o1BA,2866
119
+ verifiers/v1/harnesses/utils/launch.py,sha256=XlQezSmgq6X3F7q9L7UROw74BfF4oHFPgQLVbd-m7SI,3039
120
120
  verifiers/v1/harnesses/utils/mcp.py,sha256=Sss-DVMtxdE1eGEfq1ycdi1v7SBsmUU5UcpcIY6dGTY,4572
121
121
  verifiers/v1/interception/__init__.py,sha256=5Kvo7tcBUVaa65s9A1NiOH3CPpzw-P5btXwxB4Nbbvs,4251
122
122
  verifiers/v1/interception/base.py,sha256=Mg16Y104lyZilF9shdivdqYoqz4OYp978i_myyrulu8,2529
@@ -185,8 +185,8 @@ verifiers/v1/utils/prime.py,sha256=UTYRjp9cbjNb6CVmBHda-1wWZAIIfxNOmTyNuT7_wL4,9
185
185
  verifiers/v1/utils/retries.py,sha256=Y2ZgrAjn-qNkRKZP_RVNL_7EK0iaRcZeCa404lpGYi4,5417
186
186
  verifiers/v1/utils/score.py,sha256=493yJVMw8teCu9JxapxMFPFzI0hNUqdo0Y2nGW4kckk,6200
187
187
  verifiers/v1/utils/version.py,sha256=-obEo_-l9-D8FLef4hYxncOe-uJpxrM1g2Hig_37Sgs,1607
188
- verifiers-0.3.2.dev33.dist-info/METADATA,sha256=kK1FyrtG26OzrKqPEZXVv-Us3NU2OcvSGNbGN4Ji5c8,4144
189
- verifiers-0.3.2.dev33.dist-info/WHEEL,sha256=zOwg4jB6zX2kU910N-cMawjivD6tO8NEWvE12je1bVk,87
190
- verifiers-0.3.2.dev33.dist-info/entry_points.txt,sha256=uqQje0TMsr7k6nXlWxlPs13Si0evb3pVCEDF6c-YL80,241
191
- verifiers-0.3.2.dev33.dist-info/licenses/LICENSE,sha256=v0RrUsdV3IDoZhrRce297IXS3xMHNJ-_LdLpFAUWb9k,1072
192
- verifiers-0.3.2.dev33.dist-info/RECORD,,
188
+ verifiers-0.3.2.dev35.dist-info/METADATA,sha256=0x_tE6XuAD1uOnN5JvaiINGaA0kmXJmD7TTrpkN95kM,4149
189
+ verifiers-0.3.2.dev35.dist-info/WHEEL,sha256=zOwg4jB6zX2kU910N-cMawjivD6tO8NEWvE12je1bVk,87
190
+ verifiers-0.3.2.dev35.dist-info/entry_points.txt,sha256=uqQje0TMsr7k6nXlWxlPs13Si0evb3pVCEDF6c-YL80,241
191
+ verifiers-0.3.2.dev35.dist-info/licenses/LICENSE,sha256=v0RrUsdV3IDoZhrRce297IXS3xMHNJ-_LdLpFAUWb9k,1072
192
+ verifiers-0.3.2.dev35.dist-info/RECORD,,