A Python library that meters Anthropic usage to Revenium.
Project description
Revenium Middleware for Anthropic
A production-ready middleware library for metering and monitoring Anthropic API usage in Python applications. Supports both direct Anthropic API and AWS Bedrock with comprehensive streaming functionality.
Features
- Precise Usage Tracking: Monitor tokens, costs, and request counts for Anthropic chat completions
- Seamless Integration: Drop-in middleware that works with minimal code changes
- AWS Bedrock Support: Full integration with automatic detection and metering for Anthropic models via AWS Bedrock
- Complete Streaming Support: Full streaming functionality for both Anthropic API and AWS Bedrock
- Hybrid Initialization: Auto-initialization on import + explicit control for advanced configuration
- Thread-Safe: Production-ready with comprehensive thread safety for concurrent applications
- Flexible Configuration: Customize metering behavior to suit your application needs
What's Supported
| Feature | Direct Anthropic API | AWS Bedrock |
|---|---|---|
| Chat Completion | Full support | Full support |
| Streaming | Full support | Full support |
| Token Metering | Automatic | Automatic |
| Metadata Tracking | Full support | Full support |
| Thread Safety | Production-ready | Production-ready |
| Auto-initialization | Zero-config | Zero-config |
Note: The middleware only wraps messages.create and messages.stream endpoints. Other Anthropic SDK features work normally but aren't metered.
Quick Start
For complete examples and setup instructions, see examples/README.md
1. Create Project Directory
# Create project directory and navigate to it
mkdir my-anthropic-project
cd my-anthropic-project
2. Create Virtual Environment
# Create virtual environment
python -m venv .venv
# Activate virtual environment
source .venv/bin/activate # On Windows: .venv\Scripts\activate
3. Install Package
# Install packages (run after activation)
pip install revenium-middleware-anthropic python-dotenv
# Or with AWS Bedrock support:
pip install revenium-middleware-anthropic[bedrock] python-dotenv
4. Configure Environment Variables
Create a .env file in your project directory:
# Revenium API keys
REVENIUM_METERING_API_KEY="hak_..."
REVENIUM_METERING_BASE_URL="https://api.revenium.ai"
# Vendor API keys
ANTHROPIC_API_KEY="sk-ant-..."
# Optional: Enable debug logging
# REVENIUM_LOG_LEVEL=DEBUG
5. Run Your First Example
Download and run an example from the repository:
curl -O https://raw.githubusercontent.com/revenium/revenium-middleware-anthropic-python/main/examples/getting_started.py
python getting_started.py
Or use this simple code:
from dotenv import load_dotenv
load_dotenv() # Load environment variables from .env file
import anthropic
import revenium_middleware_anthropic # Auto-initializes on import
client = anthropic.Anthropic()
message = client.messages.create(
model="claude-3-haiku-20240307",
max_tokens=100,
messages=[{"role": "user", "content": "Please verify you are ready to assist me."}]
)
print(message.content[0].text)
That's it! The middleware automatically meters all Anthropic API calls. No code changes required.
For complete examples and setup instructions, see examples/README.md
examples/getting_started.py- Minimal example with all metadata fields documentedexamples/anthropic-advanced.py- Production-ready with detailed metadata trackingexamples/anthropic-streaming.py- Streaming support with token trackingexamples/anthropic-bedrock.py- Complete AWS Bedrock integration
AWS Bedrock Integration
The middleware provides complete AWS Bedrock integration with automatic detection and full streaming support.
Provider Detection: The middleware automatically chooses between Bedrock and direct Anthropic API based on:
- AWS credentials availability (
aws configure, IAM roles, environment variables) - Base URL detection (when
base_urlcontainsamazonaws.com) - Defaults to direct Anthropic API for safety - Bedrock only used when explicitly configured
See examples/anthropic-bedrock.py for complete working examples covering:
- Basic chat completion via AWS Bedrock
- Metadata tracking with Bedrock
- Streaming support with Bedrock
- Model mapping and configuration
Bedrock Configuration
Environment Variables
| Variable | Description | Default |
|---|---|---|
REVENIUM_METERING_API_KEY |
Your Revenium API key | Required |
REVENIUM_METERING_BASE_URL |
Revenium API endpoint | Required |
AWS_REGION |
AWS region for Bedrock | us-east-1 |
REVENIUM_BEDROCK_DISABLE |
Set to 1 to disable Bedrock support |
Not set |
AWS Authentication
The middleware uses the standard AWS credential chain:
- Environment variables (
AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY) - AWS credentials file (
~/.aws/credentials) - IAM roles (for EC2/Lambda/ECS)
- AWS SSO
Required AWS permissions:
bedrock:InvokeModel(for non-streaming requests)bedrock:InvokeModelWithResponseStream(for streaming requests)
Supported Models
The middleware automatically maps Anthropic model names to Bedrock model IDs:
| Anthropic Model | Bedrock Model ID |
|---|---|
claude-3-opus-20240229 |
anthropic.claude-3-opus-20240229-v1:0 |
claude-3-sonnet-20240229 |
anthropic.claude-3-sonnet-20240229-v1:0 |
claude-3-haiku-20240307 |
us.anthropic.claude-3-5-haiku-20241022-v1:0 |
claude-3-5-sonnet-20240620 |
anthropic.claude-3-5-sonnet-20240620-v1:0 |
claude-3-5-sonnet-20241022 |
anthropic.claude-3-5-sonnet-20241022-v2:0 |
claude-3-5-haiku-20241022 |
anthropic.claude-3-5-haiku-20241022-v1:0 |
For other models, the middleware uses the format anthropic.{model_name}.
Streaming Support
The middleware provides complete streaming support for both direct Anthropic API and AWS Bedrock with:
- Universal Interface: Same code works with both providers
- Automatic Detection: Provider routing happens transparently
- Complete Token Tracking: Accurate token counting and metering
- Thread-Safe: Production-ready concurrent streaming support
- Graceful Fallback: Automatic fallback to direct API if Bedrock fails
See examples/anthropic-streaming.py for complete streaming examples with metadata tracking and error handling.
Metadata Fields
Add business context to track usage by organization, user, task type, or custom fields. Pass a usage_metadata dictionary with any of these optional fields:
| Field | Description | Use Case |
|---|---|---|
trace_id |
Unique identifier for session or conversation tracking | Link multiple API calls together for debugging, user session analytics, or distributed tracing across services |
task_type |
Type of AI task being performed | Categorize usage by workload (e.g., "chat", "code-generation", "doc-summary") for cost analysis and optimization |
subscriber.id |
Unique user identifier | Track individual user consumption for billing, rate limiting, or user analytics |
subscriber.email |
User email address | Identify users for support, compliance, or usage reports |
subscriber.credential.name |
Authentication credential name | Track which API key or service account made the request |
subscriber.credential.value |
Authentication credential value | Associate usage with specific credentials for security auditing |
organization_id |
Organization or company identifier | Multi-tenant cost allocation, usage quotas per organization |
subscription_id |
Subscription plan identifier | Track usage against subscription limits, identify plan upgrade opportunities |
product_id |
Your product or feature identifier | Attribute AI costs to specific features in your application (e.g., "chatbot", "email-assistant") |
agent |
AI agent or bot identifier | Distinguish between multiple AI agents or automation workflows in your system |
response_quality_score |
Custom quality rating (0.0-1.0) | Track user satisfaction or automated quality metrics for model performance analysis |
Resources:
- API Reference - Complete metadata field documentation
examples/anthropic-advanced.py- Working code examples
Troubleshooting
| Issue | Solution |
|---|---|
| "No module named 'boto3'" | Install with Bedrock support: pip install revenium-middleware-anthropic[bedrock] |
| Requests go to Anthropic instead of Bedrock | Verify AWS credentials: aws sts get-caller-identity |
| "AccessDenied" errors | Ensure AWS credentials have bedrock:InvokeModel and bedrock:InvokeModelWithResponseStream permissions |
| Model not available | Check if Claude models are available in your AWS region |
| Middleware not working | Verify REVENIUM_METERING_API_KEY and REVENIUM_METERING_BASE_URL are set |
| Streaming errors | Check AWS credentials; middleware automatically falls back to direct API |
Debug Mode: Set REVENIUM_LOG_LEVEL=DEBUG to see provider detection and routing decisions
Force Direct API: Set REVENIUM_BEDROCK_DISABLE=1 to disable Bedrock detection
Check Status: Use revenium_middleware_anthropic.is_initialized() to verify setup
Compatibility
- Python 3.8+
- Anthropic Python SDK (latest version recommended)
- AWS Bedrock (with
boto3>=1.34.0when using[bedrock]extra) - Thread-Safe (production-ready for concurrent applications)
Logging
Control logging with the REVENIUM_LOG_LEVEL environment variable. Available levels:
DEBUG: Detailed debugging information (provider detection, routing decisions)INFO: General information (default)WARNING: Warning messages onlyERROR: Error messages onlyCRITICAL: Critical error messages only
Documentation
For detailed documentation, visit docs.revenium.io
Contributing
See CONTRIBUTING.md
Code of Conduct
Security
See SECURITY.md
License
This project is licensed under the MIT License - see the LICENSE file for details.
Support
For issues, feature requests, or contributions:
- Website: www.revenium.ai
- GitHub Repository: revenium/revenium-middleware-anthropic-python
- Issues: Report bugs or request features
- Documentation: docs.revenium.io
- Email: support@revenium.io
Built by Revenium
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 revenium_middleware_anthropic-0.2.27.tar.gz.
File metadata
- Download URL: revenium_middleware_anthropic-0.2.27.tar.gz
- Upload date:
- Size: 36.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8ef26b6164761f5b471fa00964fee2a459d6106b7713569855e973928b3037b0
|
|
| MD5 |
7bc4d0240107d54b3ddd6394848c8f01
|
|
| BLAKE2b-256 |
81422aae6ad135d255f4bfd9bc9b2c9c04a9d50f86aa57455a9f67d1a7626e6c
|
File details
Details for the file revenium_middleware_anthropic-0.2.27-py3-none-any.whl.
File metadata
- Download URL: revenium_middleware_anthropic-0.2.27-py3-none-any.whl
- Upload date:
- Size: 23.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ea1ce58578ec5791d81d979b93ebe8cf6a12ead1ead4a547e185acfbb9928004
|
|
| MD5 |
7326a71a65854a71f4affe025454ef94
|
|
| BLAKE2b-256 |
9d7ceb531c2d9144e497137848061f64194a16f878bc7eeff47495176c338aea
|