mirror of
https://github.com/BerriAI/litellm.git
synced 2026-09-07 08:26:10 +00:00
default feature flag to False (opt-in), fix CodeQL log injection, update docs
This commit is contained in:
parent
be153a0874
commit
e4e9362919
4 changed files with 30 additions and 23 deletions
|
|
@ -236,9 +236,9 @@ The referenced credential can contain any combination of:
|
|||
|
||||
Only keys present in the credential are applied. Keys already in the request (e.g. clientside `api_version`) are never overwritten.
|
||||
|
||||
## Disabling the Feature
|
||||
## Enabling the Feature
|
||||
|
||||
The feature is enabled by default. To disable it globally:
|
||||
This feature is **disabled by default** and must be explicitly enabled. To enable it:
|
||||
|
||||
<Tabs>
|
||||
|
||||
|
|
@ -246,7 +246,7 @@ The feature is enabled by default. To disable it globally:
|
|||
|
||||
```yaml
|
||||
litellm_settings:
|
||||
enable_model_config_credential_overrides: false
|
||||
enable_model_config_credential_overrides: true
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
|
|
@ -254,13 +254,17 @@ litellm_settings:
|
|||
<TabItem value="env" label="Environment Variable">
|
||||
|
||||
```bash
|
||||
export LITELLM_ENABLE_MODEL_CONFIG_CREDENTIAL_OVERRIDES=false
|
||||
export LITELLM_ENABLE_MODEL_CONFIG_CREDENTIAL_OVERRIDES=true
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
|
||||
</Tabs>
|
||||
|
||||
:::info
|
||||
The feature flag must be enabled before `model_config` entries in team/project metadata take effect. Without it, credential routing is completely inert — no metadata is read, no credentials are resolved.
|
||||
:::
|
||||
|
||||
## Related Documentation
|
||||
|
||||
- [Adding LLM Credentials](./ui_credentials.md) — Create and manage reusable credentials
|
||||
|
|
|
|||
|
|
@ -318,7 +318,7 @@ return_response_headers: bool = (
|
|||
False # get response headers from LLM Api providers - example x-remaining-requests,
|
||||
)
|
||||
enable_json_schema_validation: bool = False
|
||||
enable_model_config_credential_overrides: bool = True
|
||||
enable_model_config_credential_overrides: bool = False
|
||||
enable_key_alias_format_validation: bool = (
|
||||
False # opt-in validation of key_alias format on /key/generate and /key/update
|
||||
)
|
||||
|
|
|
|||
|
|
@ -1363,7 +1363,7 @@ def _apply_credential_overrides_from_model_config(
|
|||
5. Team default override (defaultconfig)
|
||||
6. Deployment default (no action needed)
|
||||
"""
|
||||
# Feature flag gate — operators can disable this with litellm.enable_model_config_credential_overrides = False
|
||||
# Feature flag gate — disabled by default, opt in with litellm.enable_model_config_credential_overrides = True
|
||||
if not litellm.enable_model_config_credential_overrides:
|
||||
return
|
||||
|
||||
|
|
@ -1402,9 +1402,10 @@ def _apply_credential_overrides_from_model_config(
|
|||
|
||||
credential_values = CredentialAccessor.get_credential_values(credential_name)
|
||||
if not credential_values:
|
||||
_safe_cred = str(credential_name).replace("\n", "").replace("\r", "")
|
||||
verbose_proxy_logger.warning(
|
||||
"model_config references credential '%s' but it was not found or has no values",
|
||||
credential_name,
|
||||
_safe_cred,
|
||||
)
|
||||
return
|
||||
|
||||
|
|
@ -1413,10 +1414,12 @@ def _apply_credential_overrides_from_model_config(
|
|||
if key in credential_values and key not in data:
|
||||
data[key] = credential_values[key]
|
||||
|
||||
_safe_model = str(model_name).replace("\n", "").replace("\r", "")
|
||||
_safe_cred = str(credential_name).replace("\n", "").replace("\r", "")
|
||||
verbose_proxy_logger.debug(
|
||||
"Applied credential override '%s' for model '%s'",
|
||||
credential_name,
|
||||
model_name,
|
||||
_safe_cred,
|
||||
_safe_model,
|
||||
)
|
||||
|
||||
|
||||
|
|
@ -1461,10 +1464,11 @@ def _resolve_credential_from_model_config(
|
|||
)
|
||||
if credential_name:
|
||||
return credential_name
|
||||
_safe_name = str(name).replace("\n", "").replace("\r", "")
|
||||
verbose_proxy_logger.debug(
|
||||
"model_config entry '%s' found but has no litellm_credentials, "
|
||||
"falling through to defaultconfig",
|
||||
name,
|
||||
_safe_name,
|
||||
)
|
||||
|
||||
# Default check
|
||||
|
|
|
|||
|
|
@ -1830,8 +1830,10 @@ async def test_bearer_token_not_in_debug_logs():
|
|||
|
||||
@pytest.fixture()
|
||||
def setup_test_credentials():
|
||||
"""Populate litellm.credential_list with test credentials, clean up after."""
|
||||
"""Populate litellm.credential_list with test credentials and enable feature flag, clean up after."""
|
||||
original = litellm.credential_list[:]
|
||||
original_flag = litellm.enable_model_config_credential_overrides
|
||||
litellm.enable_model_config_credential_overrides = True
|
||||
litellm.credential_list.extend(
|
||||
[
|
||||
CredentialItem(
|
||||
|
|
@ -1879,6 +1881,7 @@ def setup_test_credentials():
|
|||
)
|
||||
yield
|
||||
litellm.credential_list[:] = original
|
||||
litellm.enable_model_config_credential_overrides = original_flag
|
||||
|
||||
|
||||
# --- Unit tests for _extract_credential_from_entry ---
|
||||
|
|
@ -2304,8 +2307,9 @@ def test_apply_overrides_with_alias(setup_test_credentials):
|
|||
assert data["api_key"] == "key-hotel-eastus"
|
||||
|
||||
|
||||
def test_apply_overrides_feature_flag_disabled(setup_test_credentials):
|
||||
"""Feature flag litellm.enable_model_config_credential_overrides disables the feature."""
|
||||
def test_apply_overrides_feature_flag_disabled_by_default():
|
||||
"""Feature flag defaults to False — credential overrides are inert until explicitly enabled."""
|
||||
assert litellm.enable_model_config_credential_overrides is False
|
||||
data = {"model": "gpt-4"}
|
||||
user_api_key_dict = UserAPIKeyAuth(
|
||||
api_key="test-key",
|
||||
|
|
@ -2315,16 +2319,11 @@ def test_apply_overrides_feature_flag_disabled(setup_test_credentials):
|
|||
}
|
||||
},
|
||||
)
|
||||
original = litellm.enable_model_config_credential_overrides
|
||||
try:
|
||||
litellm.enable_model_config_credential_overrides = False
|
||||
_apply_credential_overrides_from_model_config(
|
||||
data=data, user_api_key_dict=user_api_key_dict
|
||||
)
|
||||
assert "api_base" not in data
|
||||
assert "api_key" not in data
|
||||
finally:
|
||||
litellm.enable_model_config_credential_overrides = original
|
||||
_apply_credential_overrides_from_model_config(
|
||||
data=data, user_api_key_dict=user_api_key_dict
|
||||
)
|
||||
assert "api_base" not in data
|
||||
assert "api_key" not in data
|
||||
|
||||
|
||||
def test_extract_credential_provider_hint_prefers_exact_match():
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue