From bc9438f900a2b6b7dc1d7bbc41ccc0af4abf1f40 Mon Sep 17 00:00:00 2001 From: "russell@unturf.com" Date: Thu, 30 Apr 2026 12:37:49 -0400 Subject: [PATCH] cli: surface answer_mode=claim_lattice on ask/query (JSON variant) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Round-tripped end-to-end against Hermes-3-8B: query "what dinosaurs were in the first jurassic park film?" --answer-mode claim_lattice -> HYBRID 5/5 verified via claim_lattice in 4.9s Hermes packed all five species into a single claim with five evidence_ids, tripping TOO_MANY_EVIDENCE_IDS (max 2/claim). The substrate's hard rule kicked in correctly — per-id checks all passed but claim under-decomposition demoted STRICT to HYBRID. Reasoner-class models (Qwen 3.6, Claude, GPT-4) should decompose into one claim per species and clear STRICT. --- aborist/cli.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/aborist/cli.py b/aborist/cli.py index 42d612e..a25b91f 100644 --- a/aborist/cli.py +++ b/aborist/cli.py @@ -2852,10 +2852,12 @@ def build_parser() -> argparse.ArgumentParser: ) ask_cmd.add_argument( "--answer-mode", dest="answer_mode", default=None, - choices=["quote", "claim_lattice_pointer"], + choices=["quote", "claim_lattice_pointer", "claim_lattice"], help=( "answer schema. See `query --answer-mode` for full semantics. " - "Default 'quote'; 'claim_lattice_pointer' enables quote-by-pointer." + "Default 'quote'; 'claim_lattice_pointer' enables quote-by-pointer; " + "'claim_lattice' is the JSON variant (vLLM guided_json + lenient " + "pre-parser; pairs with grammar-constrained inference)." ), ) ask_cmd.set_defaults(func=_cmd_ask) @@ -2949,7 +2951,7 @@ def build_parser() -> argparse.ArgumentParser: ) query_cmd.add_argument( "--answer-mode", dest="answer_mode", default=None, - choices=["quote", "claim_lattice_pointer"], + choices=["quote", "claim_lattice_pointer", "claim_lattice"], help=( "answer schema. 'quote' (default): model writes prose with " "verbatim quote spans inline. 'claim_lattice_pointer' (G0 " @@ -2957,7 +2959,9 @@ def build_parser() -> argparse.ArgumentParser: "map (E1, E2, …); model writes pointer-line prose ('Claim. " "[E12]'); renderer interpolates literal spans. Synthetic-" "elision-by-construction-impossible. No repair loop " - "(one-shot discipline)." + "(one-shot discipline). 'claim_lattice' is the JSON variant " + "(vLLM guided_json + lenient pre-parser; pairs with grammar-" + "constrained inference like Qwen 3.6 reasoner / Claude / GPT-4)." ), ) query_cmd.set_defaults(func=_cmd_query)