docs(pfi): Jev candidate bench 2026-10-04 — H2O-lightning-4b and Clef-flash vs Intern baseline

Vendor-path benches on fv-ml1 GPU 3 at the 14.4 GiB / 32k cap. Neither
candidate replaces Intern-Decision-4B: H2O reproduces its vendor figure
(205x3) and has the best calibration, but rests 1 GiB over the cap and
is 2.2x slower at the 21-criteria shape; Clef loses on accuracy (191-192),
hard tier (72-73/111), and ships a silent 16,384-token input slice.
Adds the namedef cell and JB_AUTH wiring to the 09-30 harness client.
This commit is contained in:
vh
2026-10-04 23:10:36 -07:00
parent f76429c457
commit 523f086939
2 changed files with 141 additions and 2 deletions
@@ -76,7 +76,9 @@ def load_items() -> list[dict]:
def post(url: str, body: dict, headers: dict, timeout: float = 300) -> tuple[int, dict, float]:
data = json.dumps(body).encode()
req = urllib.request.Request(url, data=data, headers={"Content-Type": "application/json", **headers})
import os as _os
_auth = {"Authorization": "Bearer " + _os.environ["JB_AUTH"]} if _os.environ.get("JB_AUTH") else {}
req = urllib.request.Request(url, data=data, headers={"Content-Type": "application/json", **_auth, **headers})
t = time.perf_counter()
try:
with urllib.request.urlopen(req, timeout=timeout) as resp:
@@ -222,6 +224,17 @@ def rotated_descriptions(options: list[dict]) -> list[dict]:
return [{**o, "description": d} for o, d in zip(options, descs)]
def contradicted_names(options: list[dict]) -> list[dict]:
"""2026-10-04 NEW row (arXiv 2609.26758): the option ids ARE semantically loaded names
(supported / insufficient / contradicted). Bind each name to a CONTRADICTING rubric by
assigning descriptions in reverse order (ids keep their position). For the 3-option
authored144 shape this swaps supported<->contradicted descriptions and leaves insufficient
self-bound. Name-following = the id whose NAME matches the gold rubric; definition-following
= the id now carrying the gold DESCRIPTION."""
descs = [o["description"] for o in options][::-1]
return [{**o, "description": d} for o, d in zip(options, descs)]
def gold_desc_id(item: dict) -> str | None:
"""After rotated_descriptions, position j carries the description that was at j+1, so the gold
description (position g) now sits at g-1."""
@@ -232,6 +245,16 @@ def gold_desc_id(item: dict) -> str | None:
return ids[(g - 1) % len(ids)]
def gold_desc_id_reversed(item: dict) -> str | None:
"""After contradicted_names (descriptions reversed), position j carries the description that
was at n-1-j, so the gold description (position g) now sits at n-1-g."""
if not item["gold"]:
return None
ids = [o["id"] for o in item["options"]]
g = ids.index(item["gold"][0])
return ids[len(ids) - 1 - g]
def main() -> int:
ap = argparse.ArgumentParser()
ap.add_argument("--backend", choices=("semif", "systemone"), required=True)
@@ -252,6 +275,7 @@ def main() -> int:
"reversed": [(i, list(reversed(i["options"])), False) for i in a144],
"shuffled": [(i, shuffled(i["options"], i["id"]), False) for i in a144],
"negative": [(i, rotated_descriptions(i["options"]), False) for i in a144],
"namedef": [(i, contradicted_names(i["options"]), False) for i in a144],
}
report = {"label": args.label, "backend": args.backend, "url": args.url,
"started_utc": time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime()), "conditions": {}}
@@ -283,7 +307,8 @@ def main() -> int:
"gold": item["gold"], "forbid": item["forbid"],
"option_ids": [o["id"] for o in options],
# negative control: the id that now carries the gold option's description
"gold_desc_id": gold_desc_id(item) if cond == "negative" else None,
"gold_desc_id": (gold_desc_id(item) if cond == "negative" else
gold_desc_id_reversed(item) if cond == "namedef" else None),
**r})
if fails >= 5 and fails == len(rows):
print(f"[{args.label}] {cond}: first {fails} rows all failed: {r}", file=sys.stderr)