mirror of
https://github.com/BerriAI/litellm.git
synced 2026-09-17 23:51:30 +00:00
perf: skip guardrails processing when not configured (16% faster add_litellm_data_to_request)
- Remove duplicate add_guardrails_from_policy_engine() call that was already being made inside move_guardrails_to_metadata() - Add early-out guard in move_guardrails_to_metadata() to skip all guardrails processing when no guardrails/policies are configured - Remove redundant data.update() wrapper around add_litellm_metadata_from_request_headers() which already modifies data in place Benchmark (3 runs x 2000 req x 1000 concurrency): - add_litellm_data_to_request: 8.87s → 7.45s (-16%) - Guardrails overhead: 1.0s (11.2%) → 0.24s (3.2%) (-76%)
This commit is contained in:
parent
b4b27203fc
commit
58291e5e65
1 changed files with 28 additions and 14 deletions
|
|
@ -848,12 +848,10 @@ async def add_litellm_data_to_request( # noqa: PLR0915
|
|||
)
|
||||
)
|
||||
|
||||
data.update(
|
||||
LiteLLMProxyRequestSetup.add_litellm_metadata_from_request_headers(
|
||||
headers=_headers,
|
||||
data=data,
|
||||
_metadata_variable_name=_metadata_variable_name,
|
||||
)
|
||||
LiteLLMProxyRequestSetup.add_litellm_metadata_from_request_headers(
|
||||
headers=_headers,
|
||||
data=data,
|
||||
_metadata_variable_name=_metadata_variable_name,
|
||||
)
|
||||
|
||||
# Add headers to metadata for guardrails to access (fixes #17477)
|
||||
|
|
@ -1108,20 +1106,13 @@ async def add_litellm_data_to_request( # noqa: PLR0915
|
|||
if disabled_callbacks and isinstance(disabled_callbacks, list):
|
||||
data["litellm_disabled_callbacks"] = disabled_callbacks
|
||||
|
||||
# Guardrails from key/team metadata
|
||||
# Guardrails from key/team metadata and policy engine
|
||||
move_guardrails_to_metadata(
|
||||
data=data,
|
||||
_metadata_variable_name=_metadata_variable_name,
|
||||
user_api_key_dict=user_api_key_dict,
|
||||
)
|
||||
|
||||
# Guardrails from policy engine
|
||||
add_guardrails_from_policy_engine(
|
||||
data=data,
|
||||
metadata_variable_name=_metadata_variable_name,
|
||||
user_api_key_dict=user_api_key_dict,
|
||||
)
|
||||
|
||||
# Team Model Aliases
|
||||
_update_model_if_team_alias_exists(
|
||||
data=data,
|
||||
|
|
@ -1462,6 +1453,29 @@ def move_guardrails_to_metadata(
|
|||
- Adds guardrails from policies attached to key/team metadata
|
||||
- Adds guardrails from policy engine based on team/key/model context
|
||||
"""
|
||||
# Early-out: skip all guardrails processing when nothing is configured
|
||||
key_metadata = user_api_key_dict.metadata
|
||||
team_metadata = user_api_key_dict.team_metadata
|
||||
|
||||
has_key_config = key_metadata and (
|
||||
"guardrails" in key_metadata or "policies" in key_metadata
|
||||
)
|
||||
has_team_config = team_metadata and (
|
||||
"guardrails" in team_metadata or "policies" in team_metadata
|
||||
)
|
||||
has_request_config = (
|
||||
"guardrails" in data or "guardrail_config" in data or "policies" in data
|
||||
)
|
||||
|
||||
# Only check policy engine if no local config (avoid import + registry lookup)
|
||||
if not (has_key_config or has_team_config or has_request_config):
|
||||
from litellm.proxy.policy_engine.policy_registry import get_policy_registry
|
||||
|
||||
if not get_policy_registry().is_initialized():
|
||||
# Nothing configured anywhere - clean up request body fields and return
|
||||
data.pop("policies", None)
|
||||
return
|
||||
|
||||
# Check key-level guardrails
|
||||
_add_guardrails_from_key_or_team_metadata(
|
||||
key_metadata=user_api_key_dict.metadata,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue