Skip to content

Commit 0d7256c

Browse files
Abhijit LAbhijit L
authored andcommitted
fix: reject status code and tests.
1 parent 8169c61 commit 0d7256c

File tree

3 files changed

+32
-21
lines changed

3 files changed

+32
-21
lines changed

litellm/proxy/guardrails/guardrail_hooks/javelin/__init__.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@ def initialize_guardrail(litellm_params: "LitellmParams", guardrail: "Guardrail"
2222
guardrail_name=guardrail.get("guardrail_name", ""),
2323
javelin_guard_name=litellm_params.guard_name,
2424
event_hook=litellm_params.mode,
25-
default_on=litellm_params.default_on,
26-
api_version=litellm_params.api_version,
25+
default_on=litellm_params.default_on or False,
26+
api_version=litellm_params.api_version or "v1",
2727
config=litellm_params.config,
2828
metadata=litellm_params.metadata,
2929
application=litellm_params.application,

litellm/proxy/guardrails/guardrail_hooks/javelin/javelin.py

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ def __init__(
3131
metadata: Optional[Dict] = None,
3232
config: Optional[Dict] = None,
3333
application: Optional[str] = None,
34-
event_hook: Optional[str] = None,
3534
**kwargs,
3635
):
3736
f"""
@@ -73,7 +72,8 @@ def __init__(
7372
self.api_base,
7473
self.api_version,
7574
)
76-
super().__init__(guardrail_name=guardrail_name, event_hook=event_hook, default_on=default_on, **kwargs)
75+
76+
super().__init__(guardrail_name=guardrail_name, default_on=default_on, **kwargs)
7777

7878
async def call_javelin_guard(
7979
self,
@@ -105,7 +105,7 @@ async def call_javelin_guard(
105105
response = await self.async_handler.post(
106106
url=url,
107107
headers=headers,
108-
json=request,
108+
json=dict(request),
109109
)
110110
verbose_proxy_logger.debug(
111111
"Javelin Guardrail: Javelin guard API response: %s", response.json()
@@ -178,8 +178,9 @@ async def async_pre_call_hook(
178178
from litellm.proxy.common_utils.callback_utils import (
179179
add_guardrail_to_applied_guardrails_header,
180180
)
181-
from litellm.litellm_core_utils.prompt_templates.common_utils import (get_last_user_message)
182-
181+
from litellm.litellm_core_utils.prompt_templates.common_utils import (
182+
get_last_user_message,
183+
)
183184

184185
verbose_proxy_logger.debug("Javelin Guardrail: pre_call_hook")
185186
verbose_proxy_logger.debug("Javelin Guardrail: Request data: %s", data)
@@ -270,14 +271,14 @@ async def async_pre_call_hook(
270271

271272
# Raise HTTPException to prevent the request from going to the LLM
272273
raise HTTPException(
273-
status_code=400,
274+
status_code=500,
274275
detail={
275276
"error": "Violated guardrail policy",
276277
"javelin_guardrail_response": javelin_response,
277278
"reject_prompt": reject_prompt,
278279
},
279280
)
280-
281+
281282
add_guardrail_to_applied_guardrails_header(
282283
request_data=data, guardrail_name=self.guardrail_name
283284
)

tests/guardrails_tests/test_javelin_guardrails.py

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -67,11 +67,14 @@ async def test_javelin_guardrail_reject_prompt():
6767
call_type="completion")
6868

6969
# Verify the exception details
70-
assert exc_info.value.status_code == 400
70+
assert exc_info.value.status_code == 500
7171
assert "Violated guardrail policy" in str(exc_info.value.detail)
72-
assert "javelin_guardrail_response" in exc_info.value.detail
73-
assert "reject_prompt" in exc_info.value.detail
74-
assert exc_info.value.detail["reject_prompt"] == "Unable to complete request, prompt injection/jailbreak detected"
72+
detail_dict = exc_info.value.detail
73+
assert isinstance(detail_dict, dict)
74+
detail_dict = dict(detail_dict)
75+
assert "javelin_guardrail_response" in detail_dict
76+
assert "reject_prompt" in detail_dict
77+
assert detail_dict["reject_prompt"] == "Unable to complete request, prompt injection/jailbreak detected"
7578

7679
#test trustsafety guardrail
7780
@pytest.mark.asyncio
@@ -139,11 +142,14 @@ async def test_javelin_guardrail_trustsafety():
139142
call_type="completion")
140143

141144
# Verify the exception details
142-
assert exc_info.value.status_code == 400
145+
assert exc_info.value.status_code == 500
143146
assert "Violated guardrail policy" in str(exc_info.value.detail)
144-
assert "javelin_guardrail_response" in exc_info.value.detail
145-
assert "reject_prompt" in exc_info.value.detail
146-
assert exc_info.value.detail["reject_prompt"] == "Unable to complete request, trust & safety violation detected"
147+
detail_dict = exc_info.value.detail
148+
assert isinstance(detail_dict, dict)
149+
detail_dict = dict(detail_dict) # Ensure type checker knows it's a dict
150+
assert "javelin_guardrail_response" in detail_dict
151+
assert "reject_prompt" in detail_dict
152+
assert detail_dict["reject_prompt"] == "Unable to complete request, trust & safety violation detected"
147153

148154
#test language detection guardrail
149155
@pytest.mark.asyncio
@@ -197,11 +203,14 @@ async def test_javelin_guardrail_language_detection():
197203
call_type="completion")
198204

199205
# Verify the exception details
200-
assert exc_info.value.status_code == 400
206+
assert exc_info.value.status_code == 500
201207
assert "Violated guardrail policy" in str(exc_info.value.detail)
202-
assert "javelin_guardrail_response" in exc_info.value.detail
203-
assert "reject_prompt" in exc_info.value.detail
204-
assert exc_info.value.detail["reject_prompt"] == "Unable to complete request, language violation detected"
208+
detail_dict = exc_info.value.detail
209+
assert isinstance(detail_dict, dict)
210+
detail_dict = dict(detail_dict) # Ensure type checker knows it's a dict
211+
assert "javelin_guardrail_response" in detail_dict
212+
assert "reject_prompt" in detail_dict
213+
assert detail_dict["reject_prompt"] == "Unable to complete request, language violation detected"
205214

206215

207216
@pytest.mark.asyncio
@@ -237,4 +246,5 @@ async def test_javelin_guardrail_no_user_message():
237246

238247
# Verify the response is unchanged
239248
assert response is not None
249+
assert isinstance(response, dict)
240250
assert response["messages"] == original_messages

0 commit comments

Comments
 (0)