verifiers 0.3.2.dev42__py3-none-any.whl → 0.3.2.dev44__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/agent.py CHANGED
@@ -9,7 +9,7 @@ server; un-entered, each run brings its own."""
9
9
 
10
10
  import asyncio
11
11
  import logging
12
- from collections.abc import AsyncIterator, Callable, Iterator, Mapping
12
+ from collections.abc import AsyncIterator, Callable, Mapping
13
13
  from contextlib import asynccontextmanager, nullcontext
14
14
  from dataclasses import dataclass
15
15
  from typing import Self
@@ -733,9 +733,3 @@ class Agents:
733
733
  f"{sorted(agents) if agents else []}"
734
734
  )
735
735
  return agents[name]
736
-
737
- def __iter__(self) -> Iterator[Agent]:
738
- return iter(self._agents.values())
739
-
740
- def __len__(self) -> int:
741
- return len(self._agents)
@@ -46,11 +46,9 @@ def main(argv: list[str] | None = None) -> None:
46
46
  narrow_config(EvalConfig, argv)
47
47
  ) # full option help, narrowed to the given ids
48
48
  return
49
- # An env-block flag (or a since-moved flat axis) skips the usage gate so the
50
- # typed parse renders its did-you-mean instead of a bare usage line.
51
- typed_axis = any(
52
- a.startswith(("--env.", "--taskset.", "--harness.", "--serve.")) for a in argv
53
- )
49
+ # An env-block flag skips the usage gate so the typed parse renders its
50
+ # did-you-mean instead of a bare usage line.
51
+ typed_axis = any(a.startswith(("--env.", "--serve.")) for a in argv)
54
52
  if (
55
53
  not extract_id(argv, "env.taskset")
56
54
  and not references_config_file(argv)
verifiers/v1/cli/gepa.py CHANGED
@@ -42,7 +42,7 @@ def main(argv: list[str] | None = None) -> None:
42
42
  narrow_config(GEPAConfig, argv)
43
43
  ) # full option help, narrowed to the given ids
44
44
  return
45
- typed_axis = any(a.startswith(("--env.", "--taskset.", "--harness.")) for a in argv)
45
+ typed_axis = any(a.startswith("--env.") for a in argv)
46
46
  if (
47
47
  not extract_id(argv, "env.taskset")
48
48
  and not references_config_file(argv)
@@ -72,13 +72,10 @@ def attempt_log_file(run_dir: Path) -> Path:
72
72
 
73
73
 
74
74
  def saved_config_path(run_dir: Path) -> Path | None:
75
- """The run's saved resolved config (`configs/resolved/<cli>.json`; legacy runs
76
- kept it at `configs/<cli>.json`), None if absent."""
77
- for config_dir in (run_dir / CONFIG_DIR / RESOLVED_DIR, run_dir / CONFIG_DIR):
78
- candidates = sorted(config_dir.glob("*.json")) if config_dir.is_dir() else []
79
- if candidates:
80
- return candidates[0]
81
- return None
75
+ """The run's saved resolved config (`configs/resolved/<cli>.json`), None if absent."""
76
+ config_dir = run_dir / CONFIG_DIR / RESOLVED_DIR
77
+ candidates = sorted(config_dir.glob("*.json")) if config_dir.is_dir() else []
78
+ return candidates[0] if candidates else None
82
79
 
83
80
 
84
81
  # Compiling an adapter is the expensive part; run output reuses only a few model classes.
verifiers/v1/episode.py CHANGED
@@ -6,6 +6,7 @@ from typing import Annotated, Any, Generic, Literal, Self
6
6
  from pydantic import BaseModel, Field, model_validator
7
7
 
8
8
  from verifiers.v1.configs.agent import WireAgentConfig
9
+ from verifiers.v1.graph import RECORD_FLOAT_DECIMALS
9
10
  from verifiers.v1.state import State, StateT
10
11
  from verifiers.v1.task import DataT, WireTaskData
11
12
  from verifiers.v1.trace import EXCLUDE_FIELDS, AgentConfigT, Error, Trace, TraceTask
@@ -146,12 +147,16 @@ class Episode(BaseModel, Generic[DataT, StateT, AgentConfigT]):
146
147
  grouped.setdefault(trace.agent.name, []).append(trace)
147
148
  return grouped
148
149
 
149
- def to_record(self) -> dict[str, Any]:
150
- """JSON record without raw trace tensors, which remain on the msgpack wire."""
150
+ def to_record(
151
+ self, float_decimals: int | None = RECORD_FLOAT_DECIMALS
152
+ ) -> dict[str, Any]:
153
+ """JSON record without raw trace tensors, which remain on the msgpack wire.
154
+ Per-token float streams are rounded to `float_decimals` (`None` keeps every digit)."""
151
155
  return self.model_dump(
152
156
  mode="json",
153
157
  exclude={"traces": {"__all__": EXCLUDE_FIELDS}},
154
158
  exclude_none=True,
159
+ context={"float_decimals": float_decimals},
155
160
  )
156
161
 
157
162
 
verifiers/v1/graph.py CHANGED
@@ -28,7 +28,14 @@ from dataclasses import dataclass
28
28
  from typing import TYPE_CHECKING, Any
29
29
 
30
30
  import numpy as np
31
- from pydantic import BaseModel, ConfigDict, Field, field_serializer, field_validator
31
+ from pydantic import (
32
+ BaseModel,
33
+ ConfigDict,
34
+ Field,
35
+ FieldSerializationInfo,
36
+ field_serializer,
37
+ field_validator,
38
+ )
32
39
  from pydantic.json_schema import SkipJsonSchema
33
40
  from renderers.base import MultiModalData, PlaceholderRange, RenderedTokens
34
41
 
@@ -65,6 +72,14 @@ def _decode_ndarray(d: dict) -> np.ndarray:
65
72
  return np.frombuffer(d["data"], dtype=np.dtype(d["dtype"])).reshape(d["shape"])
66
73
 
67
74
 
75
+ RECORD_FLOAT_DECIMALS = 4
76
+ """Default precision of per-token float streams in JSON records (`to_record`). Full-precision
77
+ digits are noise to every record reader and the least compressible bytes of a trace; four
78
+ decimals leave a logprob within 1e-4 of what the trainer saw. `to_record(float_decimals=...)`
79
+ overrides it per dump (`None` keeps every digit). The msgpack wire (`mode="python"`) keeps
80
+ full precision — training never reads the record."""
81
+
82
+
68
83
  class MessageNode(BaseModel):
69
84
  """One message in the graph: a message plus the tokens it adds to the cumulative
70
85
  sequence. Concatenating a root→leaf path's nodes reconstructs that branch's full token
@@ -150,6 +165,22 @@ class MessageNode(BaseModel):
150
165
 
151
166
  model_config = ConfigDict(arbitrary_types_allowed=True)
152
167
 
168
+ @field_serializer(
169
+ "logprobs",
170
+ "advantages",
171
+ "reference_logprobs",
172
+ "trainer_logprobs",
173
+ "entropies",
174
+ when_used="json",
175
+ )
176
+ def serialize_record_floats(
177
+ self, values: list[float] | None, info: FieldSerializationInfo
178
+ ) -> list[float] | None:
179
+ decimals = (info.context or {}).get("float_decimals", RECORD_FLOAT_DECIMALS)
180
+ if values is None or decimals is None:
181
+ return values
182
+ return [round(value, decimals) for value in values]
183
+
153
184
  @field_serializer("multi_modal_data")
154
185
  def serialize_multi_modal_data(self, mmd: MultiModalData | None) -> dict | None:
155
186
  """`MultiModalData` -> msgpack-safe dict so the pixel tensors ride the wire; numpy
verifiers/v1/harness.py CHANGED
@@ -117,31 +117,6 @@ class Harness(ABC, Generic[ConfigT]):
117
117
  # `write` moves bytes, not modes; restore the execute bits scripts need.
118
118
  await runtime.run(["chmod", "+x", *executables], {})
119
119
 
120
- async def run(
121
- self,
122
- ctx: ModelContext,
123
- trace: Trace,
124
- runtime: Runtime,
125
- endpoint: str,
126
- secret: str,
127
- mcp_urls: dict[str, str],
128
- data: TaskData,
129
- messages: Messages | None = None,
130
- ) -> None:
131
- """Run ONE segment of the exchange without retaining a process: the program
132
- from launch (or, with `messages`, the user's next turn(s) via `resume`) until
133
- it yields. The rollout loop owns the exchange across segments."""
134
- async with boundary(HarnessError, f"harness {self.config.id!r}"):
135
- if messages is None:
136
- result = await self.launch(
137
- ctx, trace, runtime, endpoint, secret, mcp_urls, data
138
- )
139
- else:
140
- result = await self.resume(
141
- ctx, trace, runtime, endpoint, secret, mcp_urls, data, messages
142
- )
143
- await self._check_result(trace, runtime, result)
144
-
145
120
  async def _check_result(
146
121
  self, trace: Trace, runtime: Runtime, result: ProgramResult
147
122
  ) -> None:
@@ -97,7 +97,6 @@ class PrimeAgentHarnessConfig(HarnessConfig):
97
97
  class PrimeAgentHarness(ACPHarness[PrimeAgentHarnessConfig]):
98
98
  APPENDS_SYSTEM_PROMPT = True
99
99
  SUPPORTS_MCP = True
100
- SUPPORTS_RESUME = True
101
100
  SUPPORTS_SKILLS = True
102
101
 
103
102
  def acp_turn_result(self, trace: Trace, result: ACPTurn) -> None:
@@ -201,9 +201,8 @@ async def _install_in_sandbox(server: ServerBase, runtime: Runtime) -> str:
201
201
  await runtime.write(env_remote, env_data)
202
202
  venv = str(PurePosixPath(workdir) / ".vf-venv")
203
203
  root_q, temp_q, cache_q, venv_q = map(shlex.quote, (root, temp, cache, venv))
204
- extras = ",".join(type(server).EXTRAS)
205
204
  vf_source = shlex.quote(vf_remote)
206
- env_source = shlex.quote(env_remote + (f"[{extras}]" if extras else ""))
205
+ env_source = shlex.quote(env_remote)
207
206
  setup = (
208
207
  f"set -e; mkdir -p {root_q} {temp_q} {cache_q}; "
209
208
  f"export TMPDIR={temp_q} UV_CACHE_DIR={cache_q}; "
@@ -279,12 +278,7 @@ async def serve_in_runtime(
279
278
  env["MCP_PORT_FILE"] = port_file
280
279
  python = sys.executable
281
280
  if runtime.type != "subprocess":
282
- # Prebuilt runtime images may already contain the server and its Python
283
- # environment. Let those servers bypass redundant per-launch source
284
- # uploads and installation while preserving the existing default.
285
- python = getattr(type(server), "RUNTIME_PYTHON", None)
286
- if python is None:
287
- python = await _install_in_sandbox(server, runtime)
281
+ python = await _install_in_sandbox(server, runtime)
288
282
  command = [python, "-m", type(server).__module__]
289
283
  if runtime.type != "subprocess":
290
284
  # Providers may invoke uv after the install shell exits, so preserve its PATH.
@@ -134,9 +134,6 @@ class ServerBase(Generic[ConfigT, StateT]):
134
134
  tools bare (no `<server>_` prefix); name collisions across servers are then the taskset
135
135
  author's concern."""
136
136
 
137
- EXTRAS: ClassVar[tuple[str, ...]] = ()
138
- """Package extras the server's module needs, applied at sandbox install."""
139
-
140
137
  def __init__(self, config: ConfigT) -> None:
141
138
  self.config = config
142
139
  self._state_cls = state_cls(type(self))
verifiers/v1/trace.py CHANGED
@@ -18,7 +18,7 @@ if TYPE_CHECKING:
18
18
  from verifiers.v1 import graph
19
19
  from verifiers.v1.configs.agent import AgentConfig, WireAgentConfig
20
20
  from verifiers.v1.errors import ProviderError
21
- from verifiers.v1.graph import MessageNode
21
+ from verifiers.v1.graph import RECORD_FLOAT_DECIMALS, MessageNode
22
22
  from verifiers.v1.runtimes import RuntimeInfo
23
23
  from verifiers.v1.semantic import (
24
24
  ACPInfo,
@@ -728,9 +728,16 @@ class Trace(BaseModel, Generic[DataT, StateT, AgentConfigT]):
728
728
  self.ok = False
729
729
  self.stop("error")
730
730
 
731
- def to_record(self) -> dict[str, Any]:
732
- """JSON record without raw tensors, which remain available on the msgpack wire."""
733
- return self.model_dump(mode="json", exclude=EXCLUDE_FIELDS)
731
+ def to_record(
732
+ self, float_decimals: int | None = RECORD_FLOAT_DECIMALS
733
+ ) -> dict[str, Any]:
734
+ """JSON record without raw tensors, which remain available on the msgpack wire.
735
+ Per-token float streams are rounded to `float_decimals` (`None` keeps every digit)."""
736
+ return self.model_dump(
737
+ mode="json",
738
+ exclude=EXCLUDE_FIELDS,
739
+ context={"float_decimals": float_decimals},
740
+ )
734
741
 
735
742
 
736
743
  WireTrace = Trace[WireTaskData, State, WireAgentConfig]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: verifiers
3
- Version: 0.3.2.dev42
3
+ Version: 0.3.2.dev44
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
@@ -1,11 +1,11 @@
1
1
  verifiers/__init__.py,sha256=yDYsckVQbUkwoh9mU_hBeCLGvS_aWgAxuoNm5LxQpDI,517
2
2
  verifiers/v1/__init__.py,sha256=qJKOsiUADKX4C1tMKsAPQXiJMo9-80FNeyPpAyRVshY,8352
3
- verifiers/v1/agent.py,sha256=QvP7jJMR1NQEzAdcqSxcPRgYYTZYt6gxst3vxmXymOE,32384
3
+ verifiers/v1/agent.py,sha256=doqKNn77Ldm1EIe-V69IwgBbMiN79FoVnvMcyZA0pNM,32223
4
4
  verifiers/v1/env.py,sha256=CEhzjojhg5jqbOYruUnc5U7TtgDHDSx8NiiFA0qfbt8,18234
5
- verifiers/v1/episode.py,sha256=uStvI4WqgJT50hmHIB55m5B-ASqqLz-fZ-ynBz9uzEY,5474
5
+ verifiers/v1/episode.py,sha256=Fft0R2W6INAVeJhoE9b8h7L_KQSz7XuxP4FT_XhcsUY,5741
6
6
  verifiers/v1/errors.py,sha256=uQySmCUrjDYFkBIii1vBFPiEcPFPQZ9EGpas_6HvcQI,5279
7
- verifiers/v1/graph.py,sha256=F07EZIti0AspEQ-0R0Cg_E8wJeKRlBHP4CCWytSL_8Q,35496
8
- verifiers/v1/harness.py,sha256=ziECqEBWV34UWbLlxrkhY6MwkbVYkoXBOoaY7mZxwTs,14753
7
+ verifiers/v1/graph.py,sha256=K6wKkoT_8TpNqPQISu2Xf0eHtAYW_KUGw0CteN5zr3c,36529
8
+ verifiers/v1/harness.py,sha256=Yx-XCIs1HAmqv1F-nhCTDBUwAx51xQWNWgFcWL1WRTM,13777
9
9
  verifiers/v1/judge.py,sha256=uqn-djkK2_7Q3kOjkDo6ipOvV_HOvuLa9y6AoDjRux8,9618
10
10
  verifiers/v1/rollout.py,sha256=hoKGn1CbShbyjEM9PgYq8pdKgoC91VebTkBSgUHLtiE,23978
11
11
  verifiers/v1/semantic.py,sha256=wssvBSEpY_tgzpFUADG9-N4HkDXgCZvNQ1pdf6qAsS0,4680
@@ -13,15 +13,15 @@ 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=-d4O06j3QG9dlv9nkWLupVjLt5-wqAf2GlXVgfBPcY8,29351
16
+ verifiers/v1/trace.py,sha256=8KCGMF2iaUNH_PypKNx--QwbSsl5dUCGeXp9Dmkm-24,29623
17
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
21
21
  verifiers/v1/cli/debug.py,sha256=x3bqOwwbwwfwQQpxHrZeKdxsW3ZVtUT9cAn_r4aOro4,11631
22
- verifiers/v1/cli/gepa.py,sha256=7YpppEMeuY2m1X5szGkybzTHztnIs83CvnSizhiEC-w,4210
22
+ verifiers/v1/cli/gepa.py,sha256=zyUbZ0ykTEq6c-YlPUSk0kqsbkzqR-mkeW4Cl0WGeJo,4180
23
23
  verifiers/v1/cli/init.py,sha256=LFF_1e2XTdgIKjWoqq_IAlOzAXcARPEroblcEGv0fCU,7599
24
- verifiers/v1/cli/output.py,sha256=HZbkHw662ppVdpTGutrKuQOSeBvtsAj5qjUokCkwkv0,8457
24
+ verifiers/v1/cli/output.py,sha256=lAl6vwKf9mVuNZb8PzOexv6Q2h-H6t0oUPcapffY3uY,8351
25
25
  verifiers/v1/cli/replay.py,sha256=2lL7h6MrIn6hIh7fuqbw7PmruCxkK5iqwoeKebr-z7Q,10246
26
26
  verifiers/v1/cli/resolve.py,sha256=Q1EHM7wWQo0YkwJA898qtZbYLaIkjIVq3Q7kUp2YIxs,4346
27
27
  verifiers/v1/cli/resume.py,sha256=hqV5AxxqeIInJeEZQerQznuijhMNijFEFcHZIltfLdE,470
@@ -32,7 +32,7 @@ verifiers/v1/cli/dashboard/eval.py,sha256=IgyEVBfTcyuKw_rXaHrRRFX4ESlwsekaPi-bxD
32
32
  verifiers/v1/cli/dashboard/replay.py,sha256=_X5up9MJsRbd_sWe4LgNTPNT8k1ip4xNpo50hxI3Ljk,2697
33
33
  verifiers/v1/cli/dashboard/validate.py,sha256=xrpK3Y90JsoDCQYLLvvsnJ4CPRMvSSJIghfHK62E6FQ,3687
34
34
  verifiers/v1/cli/eval/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
35
- verifiers/v1/cli/eval/main.py,sha256=D5-lth_F04iAZYTHglzPufdh-P9lBivD7-GgfFvWmz8,6321
35
+ verifiers/v1/cli/eval/main.py,sha256=m-7ZqBx4J2asueMR4oA43qzifOvaUnrGMKrTHi8fEZQ,6250
36
36
  verifiers/v1/cli/eval/resume.py,sha256=fYkWa0Fudq--IWfk25j_McLm67bXYWvksWmJR4u4QAU,3811
37
37
  verifiers/v1/cli/eval/runner.py,sha256=tZDPWzd6U7-5N43HGRlV7p-RnUiDleYwMUBVHzWH7mk,10015
38
38
  verifiers/v1/clients/__init__.py,sha256=Ysig0tE_0E4Jsfgfes1XHN-fK1s_RCXdqZD6E7lK4PU,507
@@ -107,7 +107,7 @@ verifiers/v1/harnesses/pi/harness.py,sha256=M0BRsfJxnBNP-KCrp0vT5gHlaJEDnyti5x_3
107
107
  verifiers/v1/harnesses/pool/__init__.py,sha256=HTYsNiWGdiNEsSHj4xhPmshJSNb7SHjQ7d4yZQ4p3HM,127
108
108
  verifiers/v1/harnesses/pool/harness.py,sha256=HKAogPbyLK5QpvPQ1teHOh_IyRQX-or2JF71nnZ_5Ps,3875
109
109
  verifiers/v1/harnesses/prime_agent/__init__.py,sha256=xfPC4RrlnyYWaf38tPAOZq4YL6M55lMpj5BoRLmaK8I,171
110
- verifiers/v1/harnesses/prime_agent/harness.py,sha256=_FJtiYvWOsBpjEBKuJsnmuldYNwJxKK8ONa5e-c_mYM,11205
110
+ verifiers/v1/harnesses/prime_agent/harness.py,sha256=vswuKVWObWC9rcDBvlCnjjPRq1qCNqCzTknkOTN3cV8,11178
111
111
  verifiers/v1/harnesses/rlm/__init__.py,sha256=hwx51xTdEWzzYgMj-p4ETNcptoub3IPMDbEdJ4uB8Ns,122
112
112
  verifiers/v1/harnesses/rlm/harness.py,sha256=iVdI4dzbuXm5v6Pq28ctLjOmcXWtC2Vmp2aKOniq0ss,10532
113
113
  verifiers/v1/harnesses/terminus_2/__init__.py,sha256=l1pwfg1HyVDEqT9efdnFWcXqaZwtKwe7TrplkyxZSA0,166
@@ -133,8 +133,8 @@ verifiers/v1/judges/reference.txt,sha256=Ej35kGXiT2uJ0LcHIeez49rCS_9uHmCQKoVdn93
133
133
  verifiers/v1/judges/rubric.py,sha256=HGQYI3xdq8I84Ce0_sDeNgk5JM597es8rOVPipjCyxU,12025
134
134
  verifiers/v1/judges/rubric.txt,sha256=3KA2ZeYYdcDweJhUGopxu9EFgARhu2aWft5S5cj8Bc8,323
135
135
  verifiers/v1/mcp/__init__.py,sha256=pm8ZWBiL1q1tY4wHvJzM_QrZ9oR8aGm-bIRWiRJsgHI,408
136
- verifiers/v1/mcp/launch.py,sha256=dqi5UCE-ShPn663glL4DwnTHk4_VBLG_0qUUwlr3p10,23776
137
- verifiers/v1/mcp/server.py,sha256=q2uB4rMz_f3qpHPwduVN9V4B9HZUHfAjuBFHV8PjfdE,13380
136
+ verifiers/v1/mcp/launch.py,sha256=K6M8ZaoOO7wt65s93wK_9Wl7bvjeQ4C8BLkrGE149DI,23373
137
+ verifiers/v1/mcp/server.py,sha256=Jqi8OMT8DnoZegXqM3UNNRzhVnbdrPEwx0DjOJo_K2A,13256
138
138
  verifiers/v1/mcp/toolset.py,sha256=G2wzNdEMGLXoQUcrwF0TartJkqokNPI3o7YUOAaaa6U,1007
139
139
  verifiers/v1/runtimes/__init__.py,sha256=ppc1R_sx-aMcuJSx4t99rTSjloUXI0M6EUj676-1PeY,2862
140
140
  verifiers/v1/runtimes/base.py,sha256=SRTUNAcdW0xJIWjfS5RcijFXqdKyXmGvp2tvV58eu58,16826
@@ -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.dev42.dist-info/METADATA,sha256=jUn_EzfMNYKrakZ9wtcpZBjuM5u1gagwHsU0tS_8oow,4065
189
- verifiers-0.3.2.dev42.dist-info/WHEEL,sha256=zOwg4jB6zX2kU910N-cMawjivD6tO8NEWvE12je1bVk,87
190
- verifiers-0.3.2.dev42.dist-info/entry_points.txt,sha256=uqQje0TMsr7k6nXlWxlPs13Si0evb3pVCEDF6c-YL80,241
191
- verifiers-0.3.2.dev42.dist-info/licenses/LICENSE,sha256=v0RrUsdV3IDoZhrRce297IXS3xMHNJ-_LdLpFAUWb9k,1072
192
- verifiers-0.3.2.dev42.dist-info/RECORD,,
188
+ verifiers-0.3.2.dev44.dist-info/METADATA,sha256=B0BGMenQq8aKxh-kAWwQ1xfbmu0Q1cXac2ZgyEefDkk,4065
189
+ verifiers-0.3.2.dev44.dist-info/WHEEL,sha256=zOwg4jB6zX2kU910N-cMawjivD6tO8NEWvE12je1bVk,87
190
+ verifiers-0.3.2.dev44.dist-info/entry_points.txt,sha256=uqQje0TMsr7k6nXlWxlPs13Si0evb3pVCEDF6c-YL80,241
191
+ verifiers-0.3.2.dev44.dist-info/licenses/LICENSE,sha256=v0RrUsdV3IDoZhrRce297IXS3xMHNJ-_LdLpFAUWb9k,1072
192
+ verifiers-0.3.2.dev44.dist-info/RECORD,,