moonlantern1 commited on
Commit
6af95df
·
verified ·
1 Parent(s): 1269304

Add OpenRouter backup key failover

Browse files
Files changed (1) hide show
  1. 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
- bootstrap_env()
65
- val = (os.environ.get("OPENROUTER_API_KEY") or "").strip()
66
- if val:
67
- return val
68
- raise ValueError(
69
- "Set OPENROUTER_API_KEY to use OpenRouter as the backend for the Gemini stages. "
70
- "See docs/ENVIRONMENT.md."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 (os.environ.get("OPENROUTER_API_KEY") or "").strip():
88
- return "openrouter"
 
 
 
 
 
 
 
 
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