Skip to content

Verifiers

Verifiers are mechanical — they confirm with SymPy, Python, or regex. They never ask an LLM to grade an LLM.

SymPy

from ebrm_system.verifiers import SymPyVerifier

v = SymPyVerifier()
r = v.check("(x+1)**2", {"expected": "x**2 + 2*x + 1"})
assert r.verified

Exec (sandboxed)

from ebrm_system.verifiers import ExecVerifier

v = ExecVerifier(timeout_s=3.0)
r = v.check("print(2+2)", {"expected_stdout": "4"})
assert r.verified

The subprocess is launched with -I -S (isolated, no site imports), with a timeout, in a temp cwd.

Regex

from ebrm_system.verifiers import RegexVerifier

v = RegexVerifier()
r = v.check("abc123", {"pattern": r"[a-z]+\d+"})
assert r.verified

Chaining

from ebrm_system.verifiers import VerifierChain, RegexVerifier, SymPyVerifier

chain = VerifierChain([RegexVerifier(), SymPyVerifier()])
results = chain.verify("42", {"pattern": r"\d+", "expected": 42})
assert chain.all_passed(results)

The chain short-circuits on the first rejection.