Explorer
/opt/scripts/update_whitelist.py
← Zurück ↓ Download
#!/usr/bin/env python3
import json, os, sys, datetime, urllib.request, urllib.error, shutil

API_KEY = os.environ.get("OPENROUTER_API_KEY", "")
WHITELIST_FILE = "/opt/data/whitelist.json"
BACKUP_DIR = "/opt/data"

if not API_KEY:
    print("FEHLER: OPENROUTER_API_KEY nicht gesetzt", file=sys.stderr)
    sys.exit(1)

if not os.path.exists(WHITELIST_FILE):
    print("FEHLER: whitelist.json fehlt. Erst compare_models.py ausfuehren.", file=sys.stderr)
    sys.exit(1)

with open(WHITELIST_FILE) as f:
    wl = json.load(f)
new_slugs = wl["slugs"]

if not new_slugs:
    print("FEHLER: Keine Slugs in whitelist.json", file=sys.stderr)
    sys.exit(1)

print(f"[update] Neue Whitelist: {len(new_slugs)} Modelle")
for s in new_slugs:
    print(f"  + {s}")

# Key-Info abrufen (hash benoetigt fuer PATCH)
req = urllib.request.Request(
    "https://openrouter.ai/api/v1/auth/key",
    headers={"Authorization": f"Bearer {API_KEY}"}
)
with urllib.request.urlopen(req, timeout=15) as resp:
    key_info = json.loads(resp.read())

key_hash = key_info.get("data", {}).get("hash", "")
if not key_hash:
    # Fallback: hash ist manchmal direkt
    key_hash = key_info.get("hash", "")

if not key_hash:
    print("FEHLER: Key-Hash nicht ermittelbar. OpenRouter-Antwort:", key_info, file=sys.stderr)
    sys.exit(1)

print(f"[update] Key-Hash: {key_hash[:12]}...")

# Backup der aktuellen Whitelist
ts = datetime.datetime.utcnow().strftime("%Y%m%d_%H%M%S")
backup_path = os.path.join(BACKUP_DIR, f"whitelist_backup_{ts}.json")
shutil.copy2(WHITELIST_FILE, backup_path)
print(f"[update] Backup -> {backup_path}")

# Whitelist aktualisieren via PATCH
payload = json.dumps({"limit_to_model_slugs": new_slugs}).encode()
req2 = urllib.request.Request(
    f"https://openrouter.ai/api/v1/keys/{key_hash}",
    data=payload,
    headers={
        "Authorization": f"Bearer {API_KEY}",
        "Content-Type": "application/json"
    },
    method="PATCH"
)
try:
    with urllib.request.urlopen(req2, timeout=15) as resp:
        result = json.loads(resp.read())
    print(f"[update] OpenRouter-Antwort: {result}")
except urllib.error.HTTPError as e:
    body = e.read().decode()
    print(f"FEHLER HTTP {e.code}: {body}", file=sys.stderr)
    sys.exit(1)

# Validierung: neue Whitelist zuruecklesen
req3 = urllib.request.Request(
    f"https://openrouter.ai/api/v1/keys/{key_hash}",
    headers={"Authorization": f"Bearer {API_KEY}"}
)
with urllib.request.urlopen(req3, timeout=15) as resp:
    check = json.loads(resp.read())

applied = check.get("data", {}).get("limit_to_model_slugs", [])
if set(applied) == set(new_slugs):
    print(f"[update] VALIDIERT: Whitelist korrekt gesetzt ({len(applied)} Modelle)")
else:
    print(f"WARNUNG: Abweichung nach Update!", file=sys.stderr)
    print(f"  Erwartet: {sorted(new_slugs)}", file=sys.stderr)
    print(f"  Erhalten: {sorted(applied)}", file=sys.stderr)
    sys.exit(1)