Overview
Overview
Section titled “Overview”DeepintShield provides complete Anthropic API compatibility through protocol adaptation. The integration handles request transformation, response normalization, and error mapping between Anthropic’s Messages API specification and DeepintShield’s internal processing pipeline.
This integration enables you to utilize DeepintShield’s features like governance, load balancing, semantic caching, multi-provider support, and more, all while preserving your existing Anthropic SDK-based architecture.
Endpoint: /anthropic
Install with the Anthropic extra:
pip install "deepintshield[anthropic]"from deepintshield import DeepintShield
shield = DeepintShield(virtual_key="sk-bf-your-virtual-key")client = shield.anthropic() # pre-wired anthropic.Anthropic
response = client.messages.create( model="anthropic/claude-sonnet-4-5", max_tokens=1000, messages=[{"role": "user", "content": "Hello!"}],)
print(response.content[0].text)import anthropic
client = anthropic.Anthropic( base_url="https://app.deepintshield.com/anthropic", api_key="sk-bf-your-virtual-key", default_headers={"x-bf-vk": "sk-bf-your-virtual-key"},)
response = client.messages.create( model="claude-sonnet-4-5", max_tokens=1000, messages=[{"role": "user", "content": "Hello!"}],)
print(response.content[0].text)import Anthropic from "@anthropic-ai/sdk";
const anthropic = new Anthropic({ baseURL: "https://app.deepintshield.com/anthropic", apiKey: "sk-bf-your-virtual-key", defaultHeaders: { "x-bf-vk": "sk-bf-your-virtual-key" },});
const response = await anthropic.messages.create({ model: "claude-sonnet-4-5", max_tokens: 1000, messages: [{ role: "user", content: "Hello!" }],});
console.log(response.content[0].text);Provider/Model Usage Examples
Section titled “Provider/Model Usage Examples”Use multiple providers through the same Anthropic SDK format by prefixing model names with the provider:
import anthropic
client = anthropic.Anthropic( base_url="http://localhost:8080/anthropic", api_key="dummy-key")
# Anthropic models (default)anthropic_response = client.messages.create( model="claude-3-sonnet-20240229", max_tokens=1000, messages=[{"role": "user", "content": "Hello from Claude!"}])
# OpenAI models via Anthropic SDK formatopenai_response = client.messages.create( model="openai/gpt-4o-mini", max_tokens=1000, messages=[{"role": "user", "content": "Hello from OpenAI!"}])
# Google Vertex models via Anthropic SDK formatvertex_response = client.messages.create( model="vertex/gemini-pro", max_tokens=1000, messages=[{"role": "user", "content": "Hello from Gemini!"}])
# Azure modelsazure_response = client.messages.create( model="azure/gpt-4o", max_tokens=1000, messages=[{"role": "user", "content": "Hello from Azure!"}])
# Local Ollama modelsollama_response = client.messages.create( model="ollama/llama3.1:8b", max_tokens=1000, messages=[{"role": "user", "content": "Hello from Ollama!"}])import Anthropic from "@anthropic-ai/sdk";
const anthropic = new Anthropic({ baseURL: "http://localhost:8080/anthropic", apiKey: "dummy-key",});
// Anthropic models (default)const anthropicResponse = await anthropic.messages.create({ model: "claude-3-sonnet-20240229", max_tokens: 1000, messages: [{ role: "user", content: "Hello from Claude!" }],});
// OpenAI models via Anthropic SDK formatconst openaiResponse = await anthropic.messages.create({ model: "openai/gpt-4o-mini", max_tokens: 1000, messages: [{ role: "user", content: "Hello from OpenAI!" }],});
// Google Vertex models via Anthropic SDK formatconst vertexResponse = await anthropic.messages.create({ model: "vertex/gemini-pro", max_tokens: 1000, messages: [{ role: "user", content: "Hello from Gemini!" }],});
// Azure modelsconst azureResponse = await anthropic.messages.create({ model: "azure/gpt-4o", max_tokens: 1000, messages: [{ role: "user", content: "Hello from Azure!" }],});
// Local Ollama modelsconst ollamaResponse = await anthropic.messages.create({ model: "ollama/llama3.1:8b", max_tokens: 1000, messages: [{ role: "user", content: "Hello from Ollama!" }],});Adding Custom Headers
Section titled “Adding Custom Headers”Pass custom headers required by DeepintShield plugins (like governance, telemetry, etc.):
import anthropic
client = anthropic.Anthropic( base_url="http://localhost:8080/anthropic", api_key="dummy-key", default_headers={ "x-bf-vk": "vk_12345", # Virtual key for governance })
response = client.messages.create( model="claude-3-sonnet-20240229", max_tokens=1000, messages=[{"role": "user", "content": "Hello with custom headers!"}])import Anthropic from "@anthropic-ai/sdk";
const anthropic = new Anthropic({ baseURL: "http://localhost:8080/anthropic", apiKey: "dummy-key", defaultHeaders: { "x-bf-vk": "vk_12345", // Virtual key for governance },});
const response = await anthropic.messages.create({ model: "claude-3-sonnet-20240229", max_tokens: 1000, messages: [{ role: "user", content: "Hello with custom headers!" }],});Using Direct Keys
Section titled “Using Direct Keys”Pass API keys directly in requests to bypass DeepintShield’s load balancing. You can pass any provider’s API key (OpenAI, Anthropic, Mistral, etc.) since DeepintShield only looks for Authorization or x-api-key headers. This requires the Allow Direct API keys option to be enabled in DeepintShield configuration.
Learn more: See Key Management for enabling direct API key usage.
import anthropic
# Using Anthropic's API key directlyclient_with_direct_key = anthropic.Anthropic( base_url="http://localhost:8080/anthropic", api_key="sk-your-anthropic-key" # Anthropic's API key works)
anthropic_response = client_with_direct_key.messages.create( model="claude-3-sonnet-20240229", max_tokens=1000, messages=[{"role": "user", "content": "Hello from Claude!"}])
# or pass different provider keys per request using headersclient = anthropic.Anthropic( base_url="http://localhost:8080/anthropic", api_key="dummy-key")
# Use Anthropic key for Claudeanthropic_response = client.messages.create( model="claude-3-sonnet-20240229", max_tokens=1000, messages=[{"role": "user", "content": "Hello Claude!"}], extra_headers={ "x-api-key": "sk-ant-your-anthropic-key" })
# Use OpenAI key for GPT modelsopenai_response = client.messages.create( model="openai/gpt-4o-mini", max_tokens=1000, messages=[{"role": "user", "content": "Hello GPT!"}], extra_headers={ "Authorization": "Bearer sk-your-openai-key" })import Anthropic from "@anthropic-ai/sdk";
// Using Anthropic's API key directlyconst anthropicWithDirectKey = new Anthropic({ baseURL: "http://localhost:8080/anthropic", apiKey: "sk-your-anthropic-key", // Anthropic's API key works});
const anthropicResponse = await anthropicWithDirectKey.messages.create({ model: "claude-3-sonnet-20240229", max_tokens: 1000, messages: [{ role: "user", content: "Hello from Claude!" }],});
// or pass different provider keys per request using headersconst anthropic = new Anthropic({ baseURL: "http://localhost:8080/anthropic", apiKey: "dummy-key",});
// Use Anthropic key for Claudeconst anthropicResponse = await anthropic.messages.create({ model: "claude-3-sonnet-20240229", max_tokens: 1000, messages: [{ role: "user", content: "Hello Claude!" }], headers: { "x-api-key": "sk-ant-your-anthropic-key", },});
// Use OpenAI key for GPT modelsconst openaiResponseWithHeader = await anthropic.messages.create({ model: "openai/gpt-4o-mini", max_tokens: 1000, messages: [{ role: "user", content: "Hello GPT!" }], headers: { "Authorization": "Bearer sk-your-openai-key", },});Async Inference
Section titled “Async Inference”Submit inference requests asynchronously and poll for results later using the x-bf-async header. This is useful for long-running requests where you don’t want to hold a connection open. See Async Inference for full details.
Messages
Section titled “Messages”import anthropicimport time
client = anthropic.Anthropic( base_url="http://localhost:8080/anthropic", api_key="dummy-key")
# Submit async requestinitial = client.messages.create( model="anthropic/claude-sonnet-4-20250514", max_tokens=256, messages=[{"role": "user", "content": "Tell me a short story."}], extra_headers={"x-bf-async": "true"})
# If content is present, the request completed synchronouslyif initial.content: print(initial.content[0].text)else: # Poll until completed while True: time.sleep(2) poll = client.messages.create( model="anthropic/claude-sonnet-4-20250514", max_tokens=256, messages=[{"role": "user", "content": "Tell me a short story."}], extra_headers={"x-bf-async-id": initial.id} ) if poll.content: print(poll.content[0].text) breakimport Anthropic from "@anthropic-ai/sdk";
const anthropic = new Anthropic({ baseURL: "http://localhost:8080/anthropic", apiKey: "dummy-key",});
// Submit async requestconst initial = await anthropic.messages.create( { model: "anthropic/claude-sonnet-4-20250514", max_tokens: 256, messages: [{ role: "user", content: "Tell me a short story." }], }, { headers: { "x-bf-async": "true" } });
// If content is present, the request completed synchronouslyif (initial.content?.length > 0) { console.log(initial.content[0].text);} else { // Poll until completed while (true) { await new Promise((r) => setTimeout(r, 2000)); const poll = await anthropic.messages.create( { model: "anthropic/claude-sonnet-4-20250514", max_tokens: 256, messages: [{ role: "user", content: "Tell me a short story." }], }, { headers: { "x-bf-async-id": initial.id } } ); if (poll.content?.length > 0) { console.log(poll.content[0].text); break; } }}Async Headers
Section titled “Async Headers”| Header | Description |
|---|---|
x-bf-async: true | Submit the request as an async job. Returns immediately with a job ID. |
x-bf-async-id: <job-id> | Poll for results of a previously submitted async job. |
x-bf-async-job-result-ttl: <seconds> | Override the default result TTL (default: 3600s). |
Supported Features
Section titled “Supported Features”The Anthropic integration supports all features that are available in both the Anthropic SDK and DeepintShield core functionality. If the Anthropic SDK supports a feature and DeepintShield supports it, the integration will work seamlessly.
Next Steps
Section titled “Next Steps”- Files and Batch API - File uploads and batch processing
- OpenAI SDK - GPT integration patterns
- Google GenAI SDK - Gemini integration patterns
- Configuration - DeepintShield setup and configuration
- Core Features - Advanced DeepintShield capabilities