Skip to main content

LangChain Blindfold

LangChain integration for Blindfold PII detection and protection. Tokenize PII before it reaches your LLM, then restore originals in the response.

Developed by Blindfold
License MIT
Input/Output String, Document

Installation

pip install langchain-blindfold

Set your Blindfold API key:

export BLINDFOLD_API_KEY=your-api-key

Get a free API key at app.blindfold.dev.

Quick Start

Protect a LangChain Chain

from langchain_blindfold import blindfold_protect
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI

tokenize, detokenize = blindfold_protect(policy="basic")

prompt = ChatPromptTemplate.from_messages([
    ("system", "You are a helpful assistant."),
    ("user", "{input}"),
])
llm = ChatOpenAI(model="gpt-4o-mini")

chain = tokenize | prompt | llm | (lambda msg: msg.content) | detokenize

# PII is tokenized before the LLM sees it, then restored in the response
result = chain.invoke("Write a follow-up email to John Doe at john@example.com")

Transform Documents for RAG

from langchain_blindfold import BlindfoldPIITransformer
from langchain_core.documents import Document

transformer = BlindfoldPIITransformer(pii_method="redact", policy="hipaa_us", region="us")

docs = [Document(page_content="Patient John Smith, SSN 123-45-6789")]
safe_docs = transformer.transform_documents(docs)
# safe_docs[0].page_content → "Patient [REDACTED], SSN [REDACTED]"

Components

blindfold_protect()

Convenience function that returns a paired tokenizer and detokenizer:

tokenize, detokenize = blindfold_protect(
    api_key=None,         # Falls back to BLINDFOLD_API_KEY env var
    region=None,          # "eu" or "us" for data residency
    policy="basic",       # Detection policy
    entities=None,        # Specific entity types to detect
    score_threshold=None, # Confidence threshold (0.0-1.0)
)

BlindfoldTokenizer

A LangChain Runnable that tokenizes PII in text:

from langchain_blindfold import BlindfoldTokenizer

tokenizer = BlindfoldTokenizer(policy="gdpr_eu", region="eu")
safe_text = tokenizer.invoke("Contact Hans at hans@example.de")
# → "Contact <Person_1> at <Email Address_1>"

BlindfoldDetokenizer

A LangChain Runnable that restores original PII from tokenized text:

from langchain_blindfold import BlindfoldTokenizer, BlindfoldDetokenizer

tokenizer = BlindfoldTokenizer(api_key="...")
detokenizer = BlindfoldDetokenizer(tokenizer=tokenizer)

tokenizer.invoke("Hi John")  # stores mapping
result = detokenizer.invoke("Response to <Person_1>")
# → "Response to John"

BlindfoldPIITransformer

A LangChain DocumentTransformer for protecting PII in documents:

from langchain_blindfold import BlindfoldPIITransformer

transformer = BlindfoldPIITransformer(
    api_key=None,         # Falls back to BLINDFOLD_API_KEY env var
    region=None,          # "eu" or "us" for data residency
    policy="basic",       # Detection policy
    pii_method="tokenize",# tokenize, redact, mask, hash, synthesize, encrypt
    entities=None,        # Specific entity types to detect
    score_threshold=None, # Confidence threshold (0.0-1.0)
)

When pii_method="tokenize", the mapping is stored in doc.metadata["blindfold_mapping"].

Policies

Policy Entities Best For
basic Names, emails, phones, locations General PII protection
gdpr_eu EU-specific: IBANs, addresses, dates of birth GDPR compliance
hipaa_us PHI: SSNs, MRNs, medical terms HIPAA compliance
pci_dss Card numbers, CVVs, expiry dates PCI DSS compliance
strict All entity types, lower threshold Maximum detection

PII Methods

Method Output Reversible
tokenize <Person_1>, <Email Address_1> Yes
redact PII removed entirely No
mask J****oe, j****om No
hash HASH_abc123 No
synthesize Jane Smith, jane@example.org No
encrypt AES-256 encrypted value Yes (with key)

Data Residency

Use the region parameter to ensure PII is processed in a specific jurisdiction:

  • region="eu" — processed in Frankfurt, Germany
  • region="us" — processed in Virginia, US
tokenize, detokenize = blindfold_protect(policy="gdpr_eu", region="eu")

Links

Metadata

Release files for langchain-blindfold 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for langchain-blindfold 0.1.0
File Size Uploaded
langchain_blindfold-0.1.0.tar.gz 9.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for langchain-blindfold 0.1.0
File Interpreter ABI Platform
langchain_blindfold-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 17.3 kB

Release files / langchain_blindfold-0.1.0.tar.gz

Download URL langchain_blindfold-0.1.0.tar.gz
Size 9.1 kB
Tags Source
SHA-256 checksum
How to use checksums
a9308f20d2383989399a7588b1dddd72b360a47f5502bdaceff0f0f2f3ddc8e2
BLAKE2b-256 checksum
How to use checksums
8bf9da95a68403a6d243c82f27be3281b3ff133dba5d81308a72fbcd5454aeb3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.2

Release files / langchain_blindfold-0.1.0-py3-none-any.whl

Download URL langchain_blindfold-0.1.0-py3-none-any.whl
Size 8.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
0de9e5699e85ccf2ac27bcb5d656a39ed1f1991eb525e36ddaa52d72ef779b3d
BLAKE2b-256 checksum
How to use checksums
1eb780e724550707aba37a22811190aa5859efc5cf55150cd15d5f7fb675ca37
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.2

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page