import numpy as np, json, urllib.request SP="/private/tmp/claude-501/-Users-timlingo/82369039-a20e-4b5a-8a5e-28234a57b996/scratchpad" np.seterr(all='ignore') M=np.load(SP+'/emb.npy'); eids=open(SP+'/ids.txt',encoding='utf-8',errors='surrogateescape').read().split('\n') eidx={k:i for i,k in enumerate(eids)} gold=json.load(open("/Users/timlingo/Development/neuron-technologies/_wt-assoc-leg/tools/retrieval-eval/gold_set.json"))['queries'] VALS=sorted({r for q in gold if q['category']=='paraphrase' for r in q['relevant']}) VI=[eidx[v] for v in VALS] def emb(t): b=json.dumps({"model":"nomic-embed-text","prompt":t}).encode() r=urllib.request.Request("http://127.0.0.1:11434/api/embeddings",data=b,headers={"Content-Type":"application/json"}) v=np.array(json.load(urllib.request.urlopen(r,timeout=60))["embedding"],dtype=np.float32) return v/(np.linalg.norm(v)+1e-9) print("qid cat bestValueNodeGlobalRank goldGlobalRank goldSiblingRank") for q in gold: if q['category']!='paraphrase': continue v=emb(q['query']); s=M@v; s[~np.isfinite(s)]=-1 ranks=sorted(int((s>s[j]).sum())+1 for j in VI) g=eidx[q['relevant'][0]]; gr=int((s>s[g]).sum())+1 sv=np.array([s[j] for j in VI]); sib=int((sv>s[g]).sum())+1 print("%-4s %-11s best=%-5d (top3 val ranks %s) gold=%-5d sib=%d" % (q['id'],q['category'],ranks[0],ranks[:3],gr,sib))