A package for sanitizing and securing user inputs to LLMs
Project description
LLM Input Sanitizer
A Python package for sanitizing and securing user inputs before sending them to large language models (LLMs).
Features
- PII Detection & Masking: Automatically detects and masks emails, phone numbers, SSNs, and credit card numbers
- Profanity Filtering: Removes or masks profanity and inappropriate language
- Input Truncation: Prevents excessively long inputs
- Unicode Normalization: Handles special characters and ensures consistent text encoding
- Prompt Injection Defense: Detects and blocks common LLM prompt injection attacks
- Jailbreak Prevention: Identifies attempts to bypass LLM safety measures
Installation
pip install llm-input-sanitizer
Quick Start
from llm_input_sanitizer import InputSanitizer, prepare_llm_messages, is_input_appropriate
# Initialize the sanitizer
sanitizer = InputSanitizer(max_length=1000)
# Sanitize user input
user_input = "My email is john@example.com and my phone is 555-123-4567"
sanitized_input = sanitizer.sanitize_input(user_input)
# Result: "My email is [EMAIL] and my phone is [PHONE]"
# Check if input is appropriate (no injection attempts)
if is_input_appropriate(sanitized_input):
# Prepare messages for the LLM
messages = prepare_llm_messages(
sanitized_input,
system_message="You are a helpful assistant."
)
# Send messages to your LLM
else:
print("Potentially harmful input detected")
Custom Profanity list
sanitizer = InputSanitizer(profanity_file="path/to/profanity_words.txt")
Custom forbidden paths
from llm_input_sanitizer import is_input_appropriate
my_patterns = [
r'custom_pattern_1',
r'custom_pattern_2',
]
is_safe = is_input_appropriate(text, forbidden_patterns=my_patterns)
Integration with OpenAI
import openai
from llm_input_sanitizer import InputSanitizer, prepare_llm_messages, is_input_appropriate
sanitizer = InputSanitizer()
def safe_llm_call(user_input):
# Sanitize the input
clean_input = sanitizer.sanitize_input(user_input)
# Check if appropriate
if not is_input_appropriate(clean_input):
return "I'm sorry, I can't process that request."
# Prepare messages
messages = prepare_llm_messages(clean_input)
# Call the LLM API
response = openai.ChatCompletion.create(
model="gpt-4",
messages=messages
)
return response.choices[0].message.content
This package provides a baseline of protection against common attacks but is not a complete security solution. Always implement defense in depth for production systems:
- Server-side validation
- Rate limiting
- Monitoring for unusual patterns
- Regular updates to security patterns
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file llm_input_sanitizer-0.2.1.tar.gz.
File metadata
- Download URL: llm_input_sanitizer-0.2.1.tar.gz
- Upload date:
- Size: 23.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e540e6812deead83aa08af67df1eebb06c3c0f90bbd67517a2b811c377dee85e
|
|
| MD5 |
a0e8d1c0a901511726ca385589e3da12
|
|
| BLAKE2b-256 |
673a9d93f05c7517e240bb665252c69cab99f2088eb8e042917a076b8f46ed1c
|
File details
Details for the file llm_input_sanitizer-0.2.1-py3-none-any.whl.
File metadata
- Download URL: llm_input_sanitizer-0.2.1-py3-none-any.whl
- Upload date:
- Size: 24.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ad4fe9a4a390cbc9d315935bf204ee9b4143a9dcdeb5f85fcb611f7335ca3d9a
|
|
| MD5 |
87e76b27bfc4e9d193eb2c5422f46f12
|
|
| BLAKE2b-256 |
5d350a14db3a4ab838b313a077c795f946a24cb1ea54e822d9bdf829f556e190
|