Spaces:
Sleeping
Sleeping
Add OpenRouter backup key failover
Browse files- src/humeo/env.py +46 -11
src/humeo/env.py
CHANGED
|
@@ -59,15 +59,42 @@ def resolve_gemini_api_key() -> str:
|
|
| 59 |
)
|
| 60 |
|
| 61 |
|
| 62 |
-
def resolve_openrouter_api_key() -> str:
|
| 63 |
-
"""Return the OpenRouter API key, or raise if missing."""
|
| 64 |
-
|
| 65 |
-
|
| 66 |
-
|
| 67 |
-
|
| 68 |
-
raise
|
| 69 |
-
|
| 70 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 71 |
)
|
| 72 |
|
| 73 |
|
|
@@ -84,8 +111,16 @@ def current_llm_provider() -> LLMProvider | None:
|
|
| 84 |
return "google"
|
| 85 |
if (os.environ.get("GEMINI_API_KEY") or "").strip():
|
| 86 |
return "google"
|
| 87 |
-
if (
|
| 88 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 89 |
return None
|
| 90 |
|
| 91 |
|
|
|
|
| 59 |
)
|
| 60 |
|
| 61 |
|
| 62 |
+
def resolve_openrouter_api_key() -> str:
|
| 63 |
+
"""Return the OpenRouter API key, or raise if missing."""
|
| 64 |
+
return resolve_openrouter_api_keys()[0]
|
| 65 |
+
|
| 66 |
+
|
| 67 |
+
def resolve_openrouter_api_keys() -> list[str]:
|
| 68 |
+
"""Return OpenRouter API keys in failover order, or raise if missing.
|
| 69 |
+
|
| 70 |
+
``OPENROUTER_API_KEY`` remains the primary key. Optional backups can be
|
| 71 |
+
supplied with ``OPENROUTER_API_KEY_BACKUP``, ``OPENROUTER_API_KEY_2``, or
|
| 72 |
+
a comma/newline-separated ``OPENROUTER_API_KEYS`` value.
|
| 73 |
+
"""
|
| 74 |
+
bootstrap_env()
|
| 75 |
+
keys: list[str] = []
|
| 76 |
+
for env_name in (
|
| 77 |
+
"OPENROUTER_API_KEY",
|
| 78 |
+
"OPENROUTER_API_KEY_BACKUP",
|
| 79 |
+
"OPENROUTER_API_KEY_2",
|
| 80 |
+
):
|
| 81 |
+
val = (os.environ.get(env_name) or "").strip()
|
| 82 |
+
if val:
|
| 83 |
+
keys.append(val)
|
| 84 |
+
|
| 85 |
+
extra = (os.environ.get("OPENROUTER_API_KEYS") or "").strip()
|
| 86 |
+
if extra:
|
| 87 |
+
for item in extra.replace("\n", ",").split(","):
|
| 88 |
+
val = item.strip()
|
| 89 |
+
if val:
|
| 90 |
+
keys.append(val)
|
| 91 |
+
|
| 92 |
+
deduped = list(dict.fromkeys(keys))
|
| 93 |
+
if deduped:
|
| 94 |
+
return deduped
|
| 95 |
+
raise ValueError(
|
| 96 |
+
"Set OPENROUTER_API_KEY to use OpenRouter as the backend for the Gemini stages. "
|
| 97 |
+
"See docs/ENVIRONMENT.md."
|
| 98 |
)
|
| 99 |
|
| 100 |
|
|
|
|
| 111 |
return "google"
|
| 112 |
if (os.environ.get("GEMINI_API_KEY") or "").strip():
|
| 113 |
return "google"
|
| 114 |
+
if any(
|
| 115 |
+
(os.environ.get(name) or "").strip()
|
| 116 |
+
for name in (
|
| 117 |
+
"OPENROUTER_API_KEY",
|
| 118 |
+
"OPENROUTER_API_KEY_BACKUP",
|
| 119 |
+
"OPENROUTER_API_KEY_2",
|
| 120 |
+
"OPENROUTER_API_KEYS",
|
| 121 |
+
)
|
| 122 |
+
):
|
| 123 |
+
return "openrouter"
|
| 124 |
return None
|
| 125 |
|
| 126 |
|