diff --git a/api/gemini-products-v3.sh b/api/gemini-products-v3.sh new file mode 100755 index 000000000..d209ef01f --- /dev/null +++ b/api/gemini-products-v3.sh @@ -0,0 +1,44 @@ +#!/bin/bash +set -u +AUDIT="${1:-}" +KG=$(grep "^GEMINI_KEY=" /etc/weval/secrets.env 2>/dev/null | cut -d= -f2- | tr -d "\"" | head -c 80) +REPORT="$AUDIT/gemini-overlap-v3.json" +TMP_B64=/tmp/gpv3_img.b64 +TMP_PAY=/tmp/gpv3_pay.json +TMP_RESP=/tmp/gpv3_resp.json +FIRST=1; COUNT=0 +echo -n "{\"doctrine\":\"197\",\"ts\":\"$(date -Iseconds)\",\"agent\":\"gemini-2.5-flash-v3\",\"reviews\":[" > "$REPORT" +for NAME in affiliates-br leadforge-br ai-sdr-br bizplan-tr workspace-br leadforge-tr affiliates-tr; do + IMG="$AUDIT/zooms/${NAME}.png" + [ ! -f "$IMG" ] && continue + base64 -w0 < "$IMG" > "$TMP_B64" + python3 > "$TMP_PAY" << PYEOF +import json +with open("$TMP_B64") as f: b64=f.read().strip()[:300000] +prompt="Zoom 400x400 page web UX. Detecte chauvauchement UI strict (au moins 2 elements physiquement superposes sur memes pixels). JSON sans markdown tous champs: {\"overlap\":true|false,\"count\":N,\"severity\":\"none|low|medium|high\",\"note\":\"description courte\"}" +print(json.dumps({"contents":[{"parts":[{"text":prompt},{"inline_data":{"mime_type":"image/png","data":b64}}]}],"generationConfig":{"temperature":0.1,"maxOutputTokens":250}})) +PYEOF + curl -sk -m 25 -X POST "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent?key=$KG" \ + -H "Content-Type: application/json" -d @"$TMP_PAY" > "$TMP_RESP" 2>&1 + CONTENT=$(python3 << PYEOF +import sys, json, re +try: + with open("$TMP_RESP") as f: d = json.loads(f.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)[:80]})) +PYEOF +) + if [ $FIRST -eq 1 ]; then FIRST=0; else echo -n "," >> "$REPORT"; fi + echo -n "{\"img\":\"$NAME\",\"r\":$CONTENT}" >> "$REPORT" + COUNT=$((COUNT+1)) + sleep 2 +done +echo "],\"reviewed\":$COUNT}" >> "$REPORT" +rm -f "$TMP_B64" "$TMP_PAY" "$TMP_RESP" +echo "{\"ok\":true,\"count\":$COUNT}" diff --git a/proofs/audit-products-2026-04-24T14-06-59/gemini-overlap-review.json b/proofs/audit-products-2026-04-24T14-06-59/gemini-overlap-review.json new file mode 100644 index 000000000..57efce3fe --- /dev/null +++ b/proofs/audit-products-2026-04-24T14-06-59/gemini-overlap-review.json @@ -0,0 +1 @@ +{"doctrine":"188","ts":"2026-04-24T16:13:49+02:00","agent":"gemini-2.5-flash","reviews":[{"img":"academy-br","r":{"raw": "{\"overlap\":"}},{"img":"academy-tr","r":{"raw": "{\""}},{"img":"adscontrol-br","r":{"raw": "{\""}},{"img":"adscontrol-tr","r":{"raw": "{\"overlap\":"}},{"img":"affiliates-br","r":{"raw": "{\"overlap\":true"}},{"img":"affiliates-tr","r":{"err": "'candidates'"}},{"img":"ai-sdr-br","r":{"raw": "{\"overlap\":false"}},{"img":"ai-sdr-tr","r":{"raw": "{\"overlap"}},{"img":"arsenal-br","r":{"raw": "{\"overlap"}},{"img":"arsenal-tr","r":{"raw": "{\"overlap"}},{"img":"auditai-br","r":{"raw": "{\"overlap\":"}},{"img":"auditai-tr","r":{"raw": "{\"overlap"}},{"img":"bizplan-br","r":{"raw": "{\"overlap\":"}},{"img":"bizplan-tr","r":{"raw": "{\"overlap\":false"}},{"img":"consulting-br","r":{"raw": "{\"overlap"}},{"img":"consulting-tr","r":{"raw": "{\"overlap\":"}},{"img":"leadforge-br","r":{"raw": "{\"overlap\":true"}},{"img":"leadforge-tr","r":{"raw": "{\""}},{"img":"workspace-br","r":{"raw": "{\"overlap\":false"}},{"img":"workspace-tr","r":{"raw": "{\"overlap"}}],"reviewed":20} diff --git a/proofs/audit-products-2026-04-24T14-06-59/gemini-overlap-v3.json b/proofs/audit-products-2026-04-24T14-06-59/gemini-overlap-v3.json new file mode 100644 index 000000000..5f4263778 --- /dev/null +++ b/proofs/audit-products-2026-04-24T14-06-59/gemini-overlap-v3.json @@ -0,0 +1 @@ +{"doctrine":"197","ts":"2026-04-24T16:16:59+02:00","agent":"gemini-2.5-flash-v3","reviews":[{"img":"affiliates-br","r":{"err": "'candidates'"}},{"img":"leadforge-br","r":{"err": "'candidates'"}},{"img":"ai-sdr-br","r":{"raw": "{\"overlap\":false,\"count\":0,\"severity"}},{"img":"bizplan-tr","r":{"err": "'candidates'"}},{"img":"workspace-br","r":{"overlap": false, "count": 0, "severity": "none", "note": "No UI elements are overlapping."}},{"img":"leadforge-tr","r":{"err": "'candidates'"}},{"img":"affiliates-tr","r":{"raw": "{\"overlap\":false,\"count\":0,\""}}],"reviewed":7}