fix(#4059): pass custom provider keys to context probes
Resolve custom provider API keys from the matched config snapshot and pass them through session hydration plus streaming fallback context-length probes. This prevents authenticated /v1/models endpoints from falling back to the default 256K window and clobbering larger persisted session metadata.
This commit is contained in:
1 parent
df6cfd0a15
commit
b2eda41b49
5 files changed
+179
-2
No files matched your search
+39
-1
@@ -2276,7 +2276,7 @@ def _model_matches_configured_default(
|
||||
|
||||
|
||||
class _ContextLengthLookupInputs:
|
||||
__slots__ = ("config_context_length", "custom_providers", "base_url", "provider")
|
||||
__slots__ = ("config_context_length", "custom_providers", "base_url", "provider", "api_key")
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
@@ -2285,11 +2285,13 @@ class _ContextLengthLookupInputs:
|
||||
custom_providers: list | None = None,
|
||||
base_url: str = "",
|
||||
provider: str = "",
|
||||
api_key: str = "",
|
||||
) -> None:
|
||||
self.config_context_length = config_context_length
|
||||
self.custom_providers = custom_providers
|
||||
self.base_url = base_url
|
||||
self.provider = provider
|
||||
self.api_key = api_key
|
||||
|
||||
|
||||
def _positive_context_length(value) -> int | None:
|
||||
@@ -2379,6 +2381,38 @@ def _providers_match_for_context(config_key: object, requested_provider: str) ->
|
||||
)
|
||||
|
||||
|
||||
def _custom_provider_api_key_for_context(entry: dict, provider: str) -> str:
|
||||
"""Resolve the API key for a matched ``custom_providers`` entry.
|
||||
|
||||
Static session hydration/update routes already have a per-profile config
|
||||
snapshot. Resolve from the matched entry instead of re-reading global config,
|
||||
while preserving the same literal, ``${ENV_VAR}``, ``key_env``, and
|
||||
sanitized-env shapes used by streaming/provider resolution.
|
||||
"""
|
||||
raw_api_key = entry.get("api_key")
|
||||
if raw_api_key is not None:
|
||||
api_key_text = str(raw_api_key).strip()
|
||||
if api_key_text.startswith("${") and api_key_text.endswith("}") and len(api_key_text) > 3:
|
||||
resolved = os.getenv(api_key_text[2:-1], "").strip()
|
||||
if resolved:
|
||||
return resolved
|
||||
elif api_key_text:
|
||||
return api_key_text
|
||||
|
||||
key_env = str(entry.get("key_env") or "").strip()
|
||||
if key_env:
|
||||
resolved = os.getenv(key_env, "").strip()
|
||||
if resolved:
|
||||
return resolved
|
||||
|
||||
try:
|
||||
from api.config import _lookup_custom_api_key_env
|
||||
|
||||
return _lookup_custom_api_key_env(provider) or ""
|
||||
except Exception:
|
||||
return ""
|
||||
|
||||
|
||||
def _context_length_lookup_inputs_for_model(
|
||||
model: str | None,
|
||||
provider: str | None = None,
|
||||
@@ -2438,6 +2472,7 @@ def _context_length_lookup_inputs_for_model(
|
||||
break
|
||||
|
||||
custom_context_length = None
|
||||
effective_api_key = ""
|
||||
if custom_providers:
|
||||
target_base = effective_base_url.rstrip("/")
|
||||
model_candidates = set(_model_lookup_candidates(bare_model or model_for_lookup))
|
||||
@@ -2467,6 +2502,7 @@ def _context_length_lookup_inputs_for_model(
|
||||
effective_provider = entry_slug
|
||||
if not effective_base_url and entry_base:
|
||||
effective_base_url = entry_base
|
||||
effective_api_key = _custom_provider_api_key_for_context(entry, effective_provider or entry_slug)
|
||||
custom_context_length = _models_config_context_length(models_cfg, bare_model or model_for_lookup)
|
||||
break
|
||||
|
||||
@@ -2489,6 +2525,7 @@ def _context_length_lookup_inputs_for_model(
|
||||
custom_providers=custom_providers,
|
||||
base_url=effective_base_url,
|
||||
provider=effective_provider,
|
||||
api_key=effective_api_key,
|
||||
)
|
||||
|
||||
|
||||
@@ -3002,6 +3039,7 @@ def _resolve_context_length_for_session_model(
|
||||
return _get_cl(
|
||||
model_for_lookup,
|
||||
_ctx_lookup.base_url,
|
||||
api_key=_ctx_lookup.api_key,
|
||||
config_context_length=_ctx_lookup.config_context_length,
|
||||
provider=_ctx_lookup.provider or provider or "",
|
||||
custom_providers=_ctx_lookup.custom_providers,
|
||||
|
||||
Reference in new issue
Block a user