PhillNet_Recall / scripts /benchmark_scale.py
ayjays132's picture
Upload 121 files
3b3b2bd verified
Raw History Blame Contribute Delete
2.29 kB
from pathlib import Path
import sys,time,json,platform,statistics,random,os,math,resource,tempfile
ROOT=Path(__file__).resolve().parents[1];sys.path.insert(0,str(ROOT))
from phillnet_recall import RecallMemory,RecallPolicy
def main():
rng=random.Random(781);policy=RecallPolicy();rows=[]
for n in (1000,10000):
with tempfile.TemporaryDirectory() as td:
path=Path(td)/'scale.sqlite'
with RecallMemory(path,policy=policy,clock=lambda:100000.,max_candidates=2048) as m:
t=time.perf_counter()
for i in range(n):m.remember(f'Unit{i:06} deployment service port is {10000+i}.',source=f'session:{i//10}',entity=f'Unit{i:06}',predicate='port',value=str(10000+i))
ingest=time.perf_counter()-t;times=[];success=0;candidate_counts=[]
for i in rng.sample(range(n),100):
t=time.perf_counter_ns();r=m.retrieve(f'Unit{i:06}',top_k=1);times.append((time.perf_counter_ns()-t)/1e6)
success+=bool(r['items'] and str(10000+i) in r['items'][0]['text']);candidate_counts.append(r['trace']['candidate_count'])
overflow=m.retrieve('deployment service port',top_k=8)
m.db.execute('PRAGMA wal_checkpoint(TRUNCATE)')
rows.append({'entries':n,'ingest_seconds':ingest,'queries':100,'correct':success,'query_family':'unique identifier; favorable lexical selectivity',
'candidate_min':min(candidate_counts),'candidate_max':max(candidate_counts),'median_ms':statistics.median(times),'p95_ms':sorted(times)[94],
'generic_query_status':overflow['status'],'database_bytes':path.stat().st_size,'accounted_payload_bytes':m.stats()['accounted_payload_bytes']})
result={'environment':{'python':sys.version,'platform':platform.platform(),'cpu_count':os.cpu_count(),'native':bool(policy.bank._lib),'max_rss_kib_linux':resource.getrusage(resource.RUSAGE_SELF).ru_maxrss},'rows':rows,'note':'Unreserved shared CPU, one process, 100 queries per size. No model-generation cost. Does not establish arbitrary-query latency or million-row scalability.'}
(ROOT/'reports/scale.json').write_text(json.dumps(result,indent=2)+'\n');print(json.dumps(result,indent=2))
if __name__=='__main__':main()