Merge remote-tracking branch 'origin/main' into ethie/pm-clean
This commit is contained in:
@@ -160,10 +160,13 @@ class GatewayAgentCacheMixin:
|
||||
return
|
||||
override: Dict[str, Any] = {k: persisted.get(k) for k in ("model", "provider", "base_url")}
|
||||
provider = persisted.get("provider")
|
||||
from hermes_cli.runtime_provider import is_foreign_provider_endpoint
|
||||
if is_foreign_provider_endpoint(provider, override.get("base_url")):
|
||||
override["base_url"] = None # left over from a switch that kept the previous provider's URL
|
||||
if provider:
|
||||
# Re-resolve credentials for the persisted provider. On failure (e.g. credentials removed
|
||||
# since the switch) keep the credential-less override — _resolve_session_agent_runtime
|
||||
# falls back to env resolution and layers model/provider.
|
||||
# retries the resolution for that provider on each turn (default route + notice meanwhile).
|
||||
try:
|
||||
runtime = _resolve_runtime_agent_kwargs_for_provider(provider, target_model=persisted.get("model") or None)
|
||||
for k in ("api_key", "api_mode", "credential_pool", "requested_provider", "max_tokens"):
|
||||
|
||||
@@ -207,7 +207,8 @@ class GatewayTurnMixin:
|
||||
skey or "", model, override_model, override_runtime.get("provider"),
|
||||
)
|
||||
return override_model, override_runtime
|
||||
# No api_key on the override: env-based resolution below, override model/provider on top.
|
||||
# No api_key on the override (credentials failed to re-resolve at rehydrate): resolve them
|
||||
# for the override's own provider below, never layer it over the default provider's runtime.
|
||||
logger.debug(
|
||||
"Session model override (no api_key, fallback): session=%s config_model=%s override_model=%s",
|
||||
skey or "", model, override_model,
|
||||
@@ -222,7 +223,19 @@ class GatewayTurnMixin:
|
||||
][:5] or "[]",
|
||||
)
|
||||
|
||||
runtime_kwargs = _resolve_runtime_agent_kwargs()
|
||||
runtime_kwargs, unavailable_override = None, None
|
||||
if override and override.get("provider"):
|
||||
try:
|
||||
runtime_kwargs = _resolve_runtime_agent_kwargs_for_provider(
|
||||
override["provider"], target_model=override.get("model") or None)
|
||||
except Exception as exc:
|
||||
# Layering the override on the default runtime sent its model to the default provider's
|
||||
# endpoint (openai-codex on the Nous URL). Run this turn on the whole default route and say
|
||||
# so; the persisted override is kept, so the next turn retries it.
|
||||
logger.warning("Session /model override provider %s unavailable: %s", override["provider"], exc)
|
||||
unavailable_override, override = override, None
|
||||
if runtime_kwargs is None:
|
||||
runtime_kwargs = _resolve_runtime_agent_kwargs()
|
||||
# Private notice metadata must never reach an ``AIAgent(**runtime_kwargs)`` spread; the turn
|
||||
# runner surfaces it through the agent's one-shot fallback notice (#74349).
|
||||
self._pre_agent_fallback_notice = runtime_kwargs.pop("_fallback_notice", None)
|
||||
@@ -230,6 +243,10 @@ class GatewayTurnMixin:
|
||||
if runtime_model:
|
||||
logger.info("Runtime provider supplied explicit model override: %s -> %s", model, runtime_model)
|
||||
model = runtime_model
|
||||
if unavailable_override and not self._pre_agent_fallback_notice:
|
||||
from hermes_cli.fallback_config import pre_agent_fallback_notice
|
||||
self._pre_agent_fallback_notice = pre_agent_fallback_notice(
|
||||
unavailable_override["provider"], unavailable_override.get("model"), runtime_kwargs.get("provider"), model)
|
||||
|
||||
cfg = getattr(self, "config", None) # getattr: bare object.__new__ test runners
|
||||
if cfg and source is not None:
|
||||
|
||||
@@ -215,6 +215,7 @@ class GatewayModelCommandsMixin:
|
||||
_sess_entry.was_auto_reset = False
|
||||
await _sess_db.update_session_model(
|
||||
_sess_entry.session_id, result.new_model, provider=result.target_provider,
|
||||
base_url=result.base_url, api_mode=result.api_mode,
|
||||
)
|
||||
except Exception as exc:
|
||||
logger.debug("Failed to persist model switch to DB: %s", exc)
|
||||
|
||||
Reference in New Issue
Block a user