From 6bab3b9fc1b5465818d46e02dc8d11f155468bda Mon Sep 17 00:00:00 2001 From: mateo-berri <277851410+mateo-berri@users.noreply.github.com> Date: Thu, 29 Oct 2026 00:57:23 -0700 Subject: [PATCH] fix(guardrails): keep rejecting during_call requests whose call type is outside CallTypes --- .../unified_guardrail/unified_guardrail.py | 4 ++-- .../unified_guardrails/test_unified_guardrail.py | 12 +++--------- 2 files changed, 5 insertions(+), 11 deletions(-) diff --git a/litellm/proxy/guardrails/guardrail_hooks/unified_guardrail/unified_guardrail.py b/litellm/proxy/guardrails/guardrail_hooks/unified_guardrail/unified_guardrail.py index 769d960bfa9..d7528bf4232 100644 --- a/litellm/proxy/guardrails/guardrail_hooks/unified_guardrail/unified_guardrail.py +++ b/litellm/proxy/guardrails/guardrail_hooks/unified_guardrail/unified_guardrail.py @@ -421,8 +421,8 @@ class UnifiedLLMGuardrails(CustomLogger): return data mappings: Final = load_guardrail_translation_mappings() - resolved_call_type: Final = _resolved_call_type(call_type) - if resolved_call_type is None or resolved_call_type not in mappings: + resolved_call_type: Final = CallTypes(call_type) + if resolved_call_type not in mappings: _warn_left_unscanned( guardrail_to_apply=guardrail_to_apply, user_api_key_dict=user_api_key_dict, diff --git a/tests/unit/proxy/guardrails/guardrail_hooks/unified_guardrails/test_unified_guardrail.py b/tests/unit/proxy/guardrails/guardrail_hooks/unified_guardrails/test_unified_guardrail.py index bb34dc9253a..073ed200dc4 100644 --- a/tests/unit/proxy/guardrails/guardrail_hooks/unified_guardrails/test_unified_guardrail.py +++ b/tests/unit/proxy/guardrails/guardrail_hooks/unified_guardrails/test_unified_guardrail.py @@ -3299,24 +3299,18 @@ class TestUnscannedRequestIsAnnounced: assert not any("\r" in message or "\n" in message for message in warnings), warnings @pytest.mark.asyncio - async def test_during_call_warns_instead_of_raising_on_a_call_type_outside_the_enum(self, caplog: pytest.LogCaptureFixture, monkeypatch: pytest.MonkeyPatch) -> None: + async def test_during_call_still_rejects_a_call_type_outside_the_enum(self, monkeypatch: pytest.MonkeyPatch) -> None: _patch_translation_mappings(monkeypatch, load_guardrail_translation_mappings()) guardrail: Final = RecordingGuardrail() - with self._capturing(caplog): - returned: Final = await UnifiedLLMGuardrails().async_moderation_hook( + with pytest.raises(ValueError, match="acompact_responses"): + await UnifiedLLMGuardrails().async_moderation_hook( data=self._request(guardrail), user_api_key_dict=UserAPIKeyAuth(api_key="test-key", request_route="/v1/responses/compact"), call_type="acompact_responses", ) assert guardrail.apply_calls == [] - assert returned["messages"] == [{"role": "user", "content": "hello world"}] - assert any( - "call type 'acompact_responses' is not one litellm can scan" in message - and "skipping during-call scanning" in message - for message in self._warnings(caplog) - ), self._warnings(caplog) async def _pre_call_on(self, guardrail: CustomGuardrail, request_route: str, call_type: str | None) -> None: await UnifiedLLMGuardrails().async_pre_call_hook(