"""Golden-set harness: hit@1, hit@5, MRR@10 over golden.jsonl. Returns per-question results so failures are listable."""
import json, os
HERE = os.path.dirname(__file__)

def load_golden(path=os.path.join(HERE, "golden.jsonl")):
    return [json.loads(l) for l in open(path) if l.strip()]

def evaluate(retriever, golden):
    rows, h1, h5, rr = [], 0, 0, 0.0
    for g in golden:
        ranked = retriever.search(g["question"], k=10)
        rank = ranked.index(g["expected_doc"]) + 1 if g["expected_doc"] in ranked else None
        h1 += rank == 1; h5 += rank is not None and rank <= 5; rr += 1 / rank if rank else 0
        rows.append({"question": g["question"], "expected": g["expected_doc"], "rank": rank})
    n = len(golden)
    return {"hit@1": h1 / n, "hit@5": h5 / n, "mrr": rr / n, "n": n}, rows
