fix(proxy): drop a key logging entry whose referenced credential holds no logging values

This commit is contained in:
Jesus Velarde 2026-11-07 16:11:51 -08:00
parent b4a7baec27
commit 4e67f5be1c
2 changed files with 25 additions and 7 deletions

View file

@ -761,18 +761,18 @@ def _with_credential(entry: Mapping[str, object]) -> Mapping[str, object] | None
credential_name: Final = entry.get("litellm_credential_name")
if not isinstance(credential_name, str):
return entry
if CredentialAccessor.find_credential(credential_name) is None:
verbose_proxy_logger.warning(
"Ignoring key logging entry for %s: credential %r is not defined",
entry.get("callback_name"),
credential_name,
)
return None
credential_vars: Final = {
name: str(value)
for name, value in CredentialAccessor.get_credential_values(credential_name).items()
if name in CALLBACK_VAR_NAMES and value is not None
}
if not credential_vars:
verbose_proxy_logger.warning(
"Ignoring key logging entry for %s: credential %r is not defined or holds no logging values",
entry.get("callback_name"),
credential_name,
)
return None
return {**entry, "callback_vars": {**credential_vars, **string_keyed(entry.get("callback_vars"))}}

View file

@ -808,6 +808,24 @@ def test_key_logging_entries_merges_each_referenced_credential_under_its_entry(m
]
@pytest.mark.parametrize(
"credential_values",
[{"api_key": "sk-model-key"}, {"arize_api_key": None}],
ids=["model-credential", "null-values"],
)
def test_key_logging_entries_drops_an_entry_whose_credential_supplies_no_logging_values(
monkeypatch: pytest.MonkeyPatch, credential_values: dict[str, object]
) -> None:
monkeypatch.setattr(litellm, "credential_list", [_credential("model-only", credential_values)])
kept: Final = {"callback_name": "langfuse", "callback_vars": {"langfuse_public_key": "pk"}}
entries: Final = [
kept,
{"callback_name": "arize", "litellm_credential_name": "model-only", "callback_vars": {}},
]
assert key_logging_entries({"logging": entries}) == (kept,)
def test_key_logging_entries_drops_an_entry_whose_credential_is_not_defined(monkeypatch: pytest.MonkeyPatch) -> None:
monkeypatch.setattr(litellm, "credential_list", [_credential("space-a", {"arize_api_key": "key-a"})])
kept: Final = {"callback_name": "langfuse", "callback_vars": {"langfuse_public_key": "pk"}}