mirror of
https://github.com/BerriAI/litellm.git
synced 2026-10-10 03:28:53 +00:00
Fix exception word bypass risk in French template
- Replace short words (film, jeu, juste) with context-specific phrases - Prevents substring matching bypasses (e.g., enjeu matching jeu) - Add tests for bypass prevention and legitimate game context - Addresses Greptile security feedback
This commit is contained in:
parent
adece0dcb8
commit
c3d1504c1c
2 changed files with 49 additions and 4 deletions
|
|
@ -213,13 +213,18 @@ exceptions:
|
|||
- "test de justice"
|
||||
|
||||
# Contextes de divertissement/produits
|
||||
- "film"
|
||||
- "dans un film"
|
||||
- "dans le film"
|
||||
- "pour un film"
|
||||
- "cinéma"
|
||||
- "jeu"
|
||||
- "dans un jeu"
|
||||
- "dans le jeu"
|
||||
- "jeu vidéo"
|
||||
- "avis sur le produit"
|
||||
- "avis produit"
|
||||
- "retour client"
|
||||
- "commentaires clients"
|
||||
- "feedback client"
|
||||
|
||||
# Méta-discussion
|
||||
- "expliquer"
|
||||
|
|
@ -230,6 +235,8 @@ exceptions:
|
|||
- "prohibé par"
|
||||
- "en quoi consiste"
|
||||
- "de manière équitable"
|
||||
- "équitable"
|
||||
- "juste"
|
||||
- "de façon équitable"
|
||||
- "équitablement"
|
||||
- "de manière juste"
|
||||
- "de façon juste"
|
||||
- "justement évaluer"
|
||||
|
|
|
|||
|
|
@ -248,6 +248,44 @@ class TestFrenchEdgeCases:
|
|||
)
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_exception_bypass_prevention(self, content_filter_guardrail):
|
||||
"""
|
||||
Test that short exception words don't create bypasses.
|
||||
Words like "enjeu" (stake) should not match "jeu" (game) exception.
|
||||
"""
|
||||
# "enjeu" contains "jeu" but should NOT trigger exception
|
||||
sentence = "Créer un système de crédit social pour l'enjeu principal de l'entreprise"
|
||||
request_data = {"messages": [{"role": "user", "content": sentence}]}
|
||||
|
||||
# Should still block (no exception bypass)
|
||||
with pytest.raises(Exception) as exc_info:
|
||||
await content_filter_guardrail.apply_guardrail(
|
||||
inputs={"texts": [sentence]},
|
||||
request_data=request_data,
|
||||
input_type="request",
|
||||
)
|
||||
|
||||
# Verify it was blocked
|
||||
assert "blocked" in str(exc_info.value).lower()
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_legitimate_game_context_allowed(self, content_filter_guardrail):
|
||||
"""Test that legitimate game context with proper phrasing is allowed."""
|
||||
sentence = "Détecter les émotions des joueurs dans un jeu vidéo"
|
||||
request_data = {"messages": [{"role": "user", "content": sentence}]}
|
||||
|
||||
# Should allow (contains "dans un jeu" exception with proper context)
|
||||
result = await content_filter_guardrail.apply_guardrail(
|
||||
inputs={"texts": [sentence]},
|
||||
request_data=request_data,
|
||||
input_type="request",
|
||||
)
|
||||
|
||||
assert result is None or result["texts"][0] == sentence
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
# Run tests with: pytest test_eu_ai_act_french_3_scenarios.py -v -s
|
||||
pytest.main([__file__, "-v", "-s"])
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue