Spaces:
Paused
Paused
Update hermes_cli/runtime_provider.py
Browse files
hermes_cli/runtime_provider.py
CHANGED
|
@@ -89,6 +89,20 @@ def _get_model_config() -> Dict[str, Any]:
|
|
| 89 |
return {}
|
| 90 |
|
| 91 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 92 |
def _provider_supports_explicit_api_mode(provider: Optional[str], configured_provider: Optional[str] = None) -> bool:
|
| 93 |
"""Check whether a persisted api_mode should be honored for a given provider.
|
| 94 |
|
|
@@ -287,6 +301,8 @@ def _get_named_custom_provider(requested_provider: str) -> Optional[Dict[str, An
|
|
| 287 |
# Resolve the API key from the env var name stored in key_env
|
| 288 |
key_env = str(entry.get("key_env", "") or "").strip()
|
| 289 |
resolved_api_key = os.getenv(key_env, "").strip() if key_env else ""
|
|
|
|
|
|
|
| 290 |
|
| 291 |
if requested_norm in {ep_name, name_norm, f"custom:{name_norm}"}:
|
| 292 |
# Found match by provider key
|
|
@@ -419,8 +435,9 @@ def _resolve_openrouter_runtime(
|
|
| 419 |
requested_provider: str,
|
| 420 |
explicit_api_key: Optional[str] = None,
|
| 421 |
explicit_base_url: Optional[str] = None,
|
|
|
|
| 422 |
) -> Dict[str, Any]:
|
| 423 |
-
model_cfg =
|
| 424 |
cfg_base_url = model_cfg.get("base_url") if isinstance(model_cfg.get("base_url"), str) else ""
|
| 425 |
cfg_provider = model_cfg.get("provider") if isinstance(model_cfg.get("provider"), str) else ""
|
| 426 |
cfg_api_key = ""
|
|
@@ -474,8 +491,8 @@ def _resolve_openrouter_runtime(
|
|
| 474 |
(cfg_api_key if use_config_base_url else ""),
|
| 475 |
(os.getenv("OLLAMA_API_KEY") if _is_ollama_url else ""),
|
| 476 |
os.getenv("OPENAI_API_KEY"),
|
| 477 |
-
os.getenv("OPENROUTER_API_KEY"),
|
| 478 |
]
|
|
|
|
| 479 |
api_key = next(
|
| 480 |
(str(candidate or "").strip() for candidate in api_key_candidates if has_usable_secret(candidate)),
|
| 481 |
"",
|
|
@@ -648,10 +665,12 @@ def resolve_runtime_provider(
|
|
| 648 |
requested: Optional[str] = None,
|
| 649 |
explicit_api_key: Optional[str] = None,
|
| 650 |
explicit_base_url: Optional[str] = None,
|
|
|
|
| 651 |
) -> Dict[str, Any]:
|
| 652 |
"""Resolve runtime provider credentials for agent execution."""
|
| 653 |
requested_provider = resolve_requested_provider(requested)
|
| 654 |
|
|
|
|
| 655 |
custom_runtime = _resolve_named_custom_runtime(
|
| 656 |
requested_provider=requested_provider,
|
| 657 |
explicit_api_key=explicit_api_key,
|
|
@@ -666,7 +685,6 @@ def resolve_runtime_provider(
|
|
| 666 |
explicit_api_key=explicit_api_key,
|
| 667 |
explicit_base_url=explicit_base_url,
|
| 668 |
)
|
| 669 |
-
model_cfg = _get_model_config()
|
| 670 |
explicit_runtime = _resolve_explicit_runtime(
|
| 671 |
provider=provider,
|
| 672 |
requested_provider=requested_provider,
|
|
@@ -878,6 +896,7 @@ def resolve_runtime_provider(
|
|
| 878 |
requested_provider=requested_provider,
|
| 879 |
explicit_api_key=explicit_api_key,
|
| 880 |
explicit_base_url=explicit_base_url,
|
|
|
|
| 881 |
)
|
| 882 |
runtime["requested_provider"] = requested_provider
|
| 883 |
return runtime
|
|
|
|
| 89 |
return {}
|
| 90 |
|
| 91 |
|
| 92 |
+
def _model_config_with_target(target_model: Optional[str] = None) -> Dict[str, Any]:
|
| 93 |
+
"""Return model config, optionally overriding the runtime model name.
|
| 94 |
+
|
| 95 |
+
External callers such as hermes-web-ui may resolve credentials for a
|
| 96 |
+
specific chat model without persisting that model into config.yaml.
|
| 97 |
+
"""
|
| 98 |
+
model_cfg = _get_model_config()
|
| 99 |
+
target = str(target_model or "").strip()
|
| 100 |
+
if target:
|
| 101 |
+
model_cfg = dict(model_cfg)
|
| 102 |
+
model_cfg["default"] = target
|
| 103 |
+
return model_cfg
|
| 104 |
+
|
| 105 |
+
|
| 106 |
def _provider_supports_explicit_api_mode(provider: Optional[str], configured_provider: Optional[str] = None) -> bool:
|
| 107 |
"""Check whether a persisted api_mode should be honored for a given provider.
|
| 108 |
|
|
|
|
| 301 |
# Resolve the API key from the env var name stored in key_env
|
| 302 |
key_env = str(entry.get("key_env", "") or "").strip()
|
| 303 |
resolved_api_key = os.getenv(key_env, "").strip() if key_env else ""
|
| 304 |
+
configured_api_key = str(entry.get("api_key", "") or "").strip()
|
| 305 |
+
resolved_api_key = resolved_api_key or configured_api_key
|
| 306 |
|
| 307 |
if requested_norm in {ep_name, name_norm, f"custom:{name_norm}"}:
|
| 308 |
# Found match by provider key
|
|
|
|
| 435 |
requested_provider: str,
|
| 436 |
explicit_api_key: Optional[str] = None,
|
| 437 |
explicit_base_url: Optional[str] = None,
|
| 438 |
+
target_model: Optional[str] = None,
|
| 439 |
) -> Dict[str, Any]:
|
| 440 |
+
model_cfg = _model_config_with_target(target_model)
|
| 441 |
cfg_base_url = model_cfg.get("base_url") if isinstance(model_cfg.get("base_url"), str) else ""
|
| 442 |
cfg_provider = model_cfg.get("provider") if isinstance(model_cfg.get("provider"), str) else ""
|
| 443 |
cfg_api_key = ""
|
|
|
|
| 491 |
(cfg_api_key if use_config_base_url else ""),
|
| 492 |
(os.getenv("OLLAMA_API_KEY") if _is_ollama_url else ""),
|
| 493 |
os.getenv("OPENAI_API_KEY"),
|
|
|
|
| 494 |
]
|
| 495 |
+
api_key_candidates.append(os.getenv("OPENROUTER_API_KEY"))
|
| 496 |
api_key = next(
|
| 497 |
(str(candidate or "").strip() for candidate in api_key_candidates if has_usable_secret(candidate)),
|
| 498 |
"",
|
|
|
|
| 665 |
requested: Optional[str] = None,
|
| 666 |
explicit_api_key: Optional[str] = None,
|
| 667 |
explicit_base_url: Optional[str] = None,
|
| 668 |
+
target_model: Optional[str] = None,
|
| 669 |
) -> Dict[str, Any]:
|
| 670 |
"""Resolve runtime provider credentials for agent execution."""
|
| 671 |
requested_provider = resolve_requested_provider(requested)
|
| 672 |
|
| 673 |
+
model_cfg = _model_config_with_target(target_model)
|
| 674 |
custom_runtime = _resolve_named_custom_runtime(
|
| 675 |
requested_provider=requested_provider,
|
| 676 |
explicit_api_key=explicit_api_key,
|
|
|
|
| 685 |
explicit_api_key=explicit_api_key,
|
| 686 |
explicit_base_url=explicit_base_url,
|
| 687 |
)
|
|
|
|
| 688 |
explicit_runtime = _resolve_explicit_runtime(
|
| 689 |
provider=provider,
|
| 690 |
requested_provider=requested_provider,
|
|
|
|
| 896 |
requested_provider=requested_provider,
|
| 897 |
explicit_api_key=explicit_api_key,
|
| 898 |
explicit_base_url=explicit_base_url,
|
| 899 |
+
target_model=target_model,
|
| 900 |
)
|
| 901 |
runtime["requested_provider"] = requested_provider
|
| 902 |
return runtime
|