#!/usr/bin/env python3 """Open Notebook API setup helper — reads .env vars, drives provider setup.""" import json, os, sys, urllib.request BASE = os.environ.get("ON_BASE", "http://72.62.251.51:5055") PW = os.environ.get("ON_PW", "UltimaHub2026!Notes") def call(method, path, body=None, timeout=90): req = urllib.request.Request(BASE + path, method=method) req.add_header("Authorization", "Bearer " + PW) req.add_header("Content-Type", "application/json") data = json.dumps(body).encode() if body is not None else None try: with urllib.request.urlopen(req, data=data, timeout=timeout) as r: return r.status, json.loads(r.read().decode()) except urllib.error.HTTPError as e: try: return e.code, json.loads(e.read().decode()) except Exception: return e.code, e.read().decode()[:300] except Exception as e: return -1, str(e) if __name__ == "__main__": cmd = sys.argv[1] if cmd == "creds": print(json.dumps(call("GET", "/api/credentials")[1], indent=1)) elif cmd == "discover": s, r = call("POST", f"/api/credentials/{sys.argv[2]}/discover") print("discover:", s, json.dumps(r)[:800]) elif cmd == "register": s, r = call("POST", f"/api/credentials/{sys.argv[2]}/register-models") print("register:", s, json.dumps(r)[:800]) elif cmd == "add-creds": body = {"provider": sys.argv[2], "name": sys.argv[3]} if len(sys.argv) > 4 and sys.argv[4]: body["api_key"] = sys.argv[4] if len(sys.argv) > 5 and sys.argv[5]: body["base_url"] = sys.argv[5] s, r = call("POST", "/api/credentials", body) print("add:", s, json.dumps(r)[:800]) elif cmd == "autoassign": s, r = call("POST", "/api/models/auto-assign") print("auto-assign:", s, json.dumps(r)[:800]) elif cmd == "post": path = sys.argv[2] body = json.loads(sys.argv[3]) if len(sys.argv) > 3 else None s, r = call("POST", path, body) print(s, json.dumps(r)[:900]) elif cmd == "defaults": print(json.dumps(call("GET", "/api/models/defaults")[1], indent=1)) elif cmd == "models": s, r = call("GET", "/api/models") print("models:", s) for m in (r if isinstance(r, list) else r.get("models", []))[:40]: print(" -", m.get("provider"), "|", m.get("model_id") or m.get("id"), "|", m.get("modality"), "| enabled:", m.get("enabled")) elif cmd == "providers": print(json.dumps(call("GET", "/api/models/providers")[1], indent=1)[:900])