Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion hermes_cli/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -3849,7 +3849,7 @@ def _normalize_custom_provider_entry(
if isinstance(api_key, str) and api_key.strip():
normalized["api_key"] = api_key.strip()

key_env = entry.get("key_env")
key_env = entry.get("key_env") or entry.get("api_key_env")
if isinstance(key_env, str) and key_env.strip():
normalized["key_env"] = key_env.strip()

Expand Down
2 changes: 1 addition & 1 deletion hermes_cli/model_switch.py
Original file line number Diff line number Diff line change
Expand Up @@ -1780,7 +1780,7 @@ def _has_aws_sdk_creds_for_listing(slug: str) -> bool:
if not raw_name or not api_url:
continue
inline_api_key = (entry.get("api_key") or "").strip()
key_env = (entry.get("key_env") or "").strip()
key_env = (entry.get("key_env") or entry.get("api_key_env") or "").strip()
api_key = inline_api_key or (
os.environ.get(key_env, "").strip() if key_env else ""
)
Expand Down
6 changes: 3 additions & 3 deletions hermes_cli/runtime_provider.py
Original file line number Diff line number Diff line change
Expand Up @@ -539,7 +539,7 @@ def _get_named_custom_provider(requested_provider: str) -> Optional[Dict[str, An
# Match exact name or normalized name
name_norm = _normalize_custom_provider_name(ep_name)
# Resolve the API key from the env var name stored in key_env
key_env = str(entry.get("key_env", "") or "").strip()
key_env = str(entry.get("key_env") or entry.get("api_key_env") or "").strip()
resolved_api_key = os.getenv(key_env, "").strip() if key_env else ""
# Fall back to inline api_key when key_env is absent or unresolvable
if not resolved_api_key:
Expand Down Expand Up @@ -626,7 +626,7 @@ def _get_named_custom_provider(requested_provider: str) -> Optional[Dict[str, An
"base_url": base_url.strip(),
"api_key": str(entry.get("api_key", "") or "").strip(),
}
key_env = str(entry.get("key_env", "") or "").strip()
key_env = str(entry.get("key_env") or entry.get("api_key_env") or "").strip()
if key_env:
result["key_env"] = key_env
if provider_key:
Expand Down Expand Up @@ -758,7 +758,7 @@ def _resolve_named_custom_runtime(
api_key_candidates = [
(explicit_api_key or "").strip(),
str(custom_provider.get("api_key", "") or "").strip(),
os.getenv(str(custom_provider.get("key_env", "") or "").strip(), "").strip(),
os.getenv(str(custom_provider.get("key_env") or custom_provider.get("api_key_env") or "").strip(), "").strip(),
# Gate provider env keys on their authoritative hosts — sending
# OPENAI_API_KEY to a local-llm endpoint leaks credentials (#28660).
(os.getenv("OPENAI_API_KEY", "").strip() if _cp_is_openai_url else ""),
Expand Down