From 3b7cc1d1382a88e53529d61aaae9d48545f8cc04 Mon Sep 17 00:00:00 2001 From: Julio Quinteros Pro Date: Sat, 14 Feb 2026 14:42:54 -0300 Subject: [PATCH] docs: improve comment clarity per Greptile feedback Restructure comments to make the intent clearer: - First function: matches/tracks policies (may find nothing) - Second function: always runs independent resolution (may find inherited guardrails) This makes it clear why both functions must always be called. --- litellm/proxy/litellm_pre_call_utils.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/litellm/proxy/litellm_pre_call_utils.py b/litellm/proxy/litellm_pre_call_utils.py index bafd473d209..4d77af513a8 100644 --- a/litellm/proxy/litellm_pre_call_utils.py +++ b/litellm/proxy/litellm_pre_call_utils.py @@ -1704,12 +1704,12 @@ def add_guardrails_from_policy_engine( f"key_alias={context.key_alias}, model={context.model}, tags={context.tags}" ) - # Match and track policies (may be empty, but resolution still happens) + # Match and track policies based on attachments and request body _match_and_track_policies(data, context, request_body_policies) - # Apply resolved guardrails to metadata - # Note: PolicyResolver does its own independent matching and inheritance resolution, - # so we always call it even if applied_policy_names is empty + # Always resolve and apply guardrails, even if no policies matched above. + # PolicyResolver does its own independent matching and inheritance resolution, + # so guardrails can still be applied via inherited parent policies. _apply_resolved_guardrails_to_metadata(data, metadata_variable_name, context)