Files
weval-l99/wevia-visual-analysis.py.DISABLED
2026-04-13 12:43:21 +02:00

32 lines
2.0 KiB
Plaintext
Executable File

import os,json,base64,subprocess,glob,time
from datetime import datetime
SS='/var/www/html/l99-screenshots'
OUT='/var/www/html/api/l99-analysis.json'
pngs=sorted(glob.glob(SS+'/*.png'),key=os.path.getmtime,reverse=True)[:10]
scans={};ok=w=f=0
for p in pngs:
name=os.path.basename(p).replace('.png','')
try:
b64=base64.b64encode(open(p,'rb').read()).decode()
if len(b64)>2000000: print(f'SKIP {name}');continue
body=json.dumps({'model':'moondream','prompt':'Is this dashboard working correctly? Reply OK, WARN or FAIL then describe in 1 sentence.','images':[b64],'stream':False})
open('/tmp/vr-visual.json','w').write(body)
r=subprocess.run(['curl','-sS','-X','POST','http://127.0.0.1:11435/api/generate','-H','Content-Type: application/json','-d','@/tmp/vr-visual.json','--max-time','40'],capture_output=True,text=True,timeout=45)
d=json.loads(r.stdout)
resp=d.get('response','').strip()
dur=round(d.get('total_duration',0)/1e9,1)
st='success'
if any(x in resp.lower() for x in ['fail','error','broken','blank','crash']): st='fail';f+=1
elif any(x in resp.lower() for x in ['warn','issue','missing','loading']): st='warn';w+=1
else: st='success';ok+=1
scans[name]={'status':st,'analysis':resp[:150],'duration':dur,'engine':'moondream','ts':datetime.now().isoformat()}
print(f'{st} {name} ({dur}s)')
except Exception as e:
scans[name]={'status':'partial','analysis':str(e)[:80],'duration':0,'engine':'error','ts':datetime.now().isoformat()}
print(f'ERR {name}: {e}')
time.sleep(1)
total=ok+w+f+len([s for s in scans.values() if s['status']=='partial'])
out={'scans':scans,'stats':{'total':total,'success':ok,'warn':w,'fail':f,'partial':total-ok-w-f},'engine':'moondream-sovereign (Ollama local, 0 cost)','total':total,'timestamp':datetime.now().isoformat()}
open(OUT,'w').write(json.dumps(out,indent=2))
print(f'DONE: {total} analyzed | {ok} OK | {w} WARN | {f} FAIL')