#!/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)