test_openrouter_key.py 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. #!/usr/bin/env python3
  2. """Validate OpenRouter auth through the user-filtered models endpoint."""
  3. from __future__ import annotations
  4. import os
  5. import sys
  6. from pathlib import Path
  7. import httpx
  8. from dotenv import load_dotenv
  9. def main() -> int:
  10. project_dir = Path(__file__).resolve().parents[1]
  11. load_dotenv(project_dir / ".env", override=True)
  12. api_key = os.getenv("OPENROUTER_API_KEY", "").strip()
  13. base_url = os.getenv("OPENROUTER_BASE_URL", "https://openrouter.piaoquantv.com/api/v1").rstrip("/")
  14. if not api_key:
  15. print("OpenRouter key: MISSING", file=sys.stderr)
  16. return 2
  17. try:
  18. response = httpx.get(
  19. f"{base_url}/models/user",
  20. headers={"Authorization": f"Bearer {api_key}"},
  21. timeout=30,
  22. )
  23. except httpx.HTTPError as exc:
  24. print(f"OpenRouter key check: NETWORK ERROR ({type(exc).__name__})", file=sys.stderr)
  25. return 3
  26. if response.status_code == 200:
  27. data = response.json().get("data") or []
  28. model_ids = {str(item.get("id") or "") for item in data}
  29. configured_model = os.getenv("CODEX_MODEL", "").strip()
  30. print("OpenRouter key: VALID")
  31. print(f"User-visible models: {len(model_ids)}")
  32. if configured_model:
  33. print(f"Configured model available: {configured_model in model_ids} ({configured_model})")
  34. return 0
  35. message = "unknown error"
  36. try:
  37. payload = response.json()
  38. error = payload.get("error") or payload.get("message") or {}
  39. message = error.get("message", "unknown error") if isinstance(error, dict) else str(error)
  40. except ValueError:
  41. pass
  42. print(f"OpenRouter key: INVALID (HTTP {response.status_code}: {message[:200]})", file=sys.stderr)
  43. return 1
  44. if __name__ == "__main__":
  45. raise SystemExit(main())