#!/bin/bash AUDIT="$1" KG=$(grep "^GEMINI_KEY=" /etc/weval/secrets.env | cut -d= -f2- | tr -d '"') REVIEWS=() for IMG in "$AUDIT"/shots/*.png; do NAME=$(basename "$IMG" .png) B64=$(base64 -w0 < "$IMG" | head -c 400000) PROMPT='Evalue UX de cette page web WEVAL 1440x900. Note 1-10 sur: coherence_design, hierarchy_visuelle, lisibilite, polish_premium. JSON strict sans markdown: {"page":"'"$NAME"'","coherence":N,"hierarchy":N,"lisibilite":N,"polish":N,"global":N,"improvements":"court"}' PAYLOAD=$(python3 -c " import json, sys print(json.dumps({'contents':[{'parts':[{'text':sys.argv[1]},{'inline_data':{'mime_type':'image/png','data':sys.argv[2]}}]}],'generationConfig':{'temperature':0.2,'maxOutputTokens':300}})) " "$PROMPT" "$B64") RESP=$(curl -sk -m 30 -X POST "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent?key=$KG" -H "Content-Type: application/json" -d "$PAYLOAD") CONTENT=$(echo "$RESP" | python3 -c " import sys, json, re try: d = json.loads(sys.stdin.read()) t = d['candidates'][0]['content']['parts'][0]['text'] t = re.sub(r'\`\`\`[a-z]*', '', t).strip() m = re.search(r'\{.*?\}', t, re.DOTALL) if m: try: print(json.dumps(json.loads(m.group(0)))) except: print(json.dumps({'raw':t[:250]})) else: print(json.dumps({'raw':t[:250]})) except Exception as e: print(json.dumps({'err':str(e)[:100]}))") REVIEWS+=("{\"page\":\"$NAME\",\"review\":$CONTENT}") sleep 1 done REPORT="$AUDIT/gemini-quality-review.json" { echo -n "{\"doctrine\":\"185\",\"ts\":\"$(date -Iseconds)\",\"agent\":\"gemini-2.5-flash\",\"reviewed\":${#REVIEWS[@]},\"reviews\":[" F=1 for r in "${REVIEWS[@]}"; do [ $F = 1 ] && F=0 || echo -n ","; echo -n "$r"; done echo "]}" } > "$REPORT" echo "{\"ok\":true,\"report\":\"${REPORT#/var/www/html}\"}"