OpenTelemetry-based SDK for tracking and billing AI agent usage with Cost Guard protection
Project description
AgentBill Python SDK
OpenTelemetry-based SDK for automatically tracking and billing AI agent usage.
Installation
From PyPI (Recommended)
pip install agentbill-py-sdk
From PyPI (Coming Soon)
pip install agentbill
From Source
# Clone your repository and install
git clone https://github.com/yourusername/agentbill-python-sdk.git
cd agentbill-python-sdk
pip install -e .
File Structure
agentbill-python/
├── agentbill/
│ ├── __init__.py
│ ├── client.py
│ ├── tracer.py
│ └── types.py
├── examples/
│ ├── openai_basic.py
│ ├── anthropic_basic.py
│ ├── bedrock_basic.py
│ ├── azure_openai_basic.py
│ ├── mistral_basic.py
│ └── google_ai_basic.py
├── tests/
│ ├── test_agentbill.py
│ └── test_tracer.py
├── README.md
├── setup.py
├── pyproject.toml
├── pytest.ini
├── Makefile
├── CHANGELOG.md
├── CONTRIBUTING.md
├── SECURITY.md
└── LICENSE
Quick Start
from agentbill import AgentBill
import openai
# Initialize AgentBill
agentbill = AgentBill.init({
"api_key": "your-api-key",
"customer_id": "customer-123",
"debug": True
})
# Wrap your OpenAI client
client = agentbill.wrap_openai(openai.OpenAI(
api_key="sk-..."
))
# Use normally - all calls are automatically tracked!
response = client.chat.completions.create(
model="gpt-4",
messages=[{"role": "user", "content": "Hello!"}]
)
⚠️ Critical: Cost Guard Error Handling
When using budget limits (daily_budget/monthly_budget), the SDK raises exceptions when limits are exceeded. Do NOT catch and continue with direct AI calls - the blocking is intentional to prevent overspending!
# ❌ WRONG - This bypasses budget protection!
try:
response = wrapped_client.chat.completions.create(...)
except Exception as e:
print("AgentBill failed, continuing anyway...")
response = unwrapped_client.chat.completions.create(...) # BUDGET BYPASSED!
# ✅ CORRECT - Respect the block, handle gracefully
try:
response = wrapped_client.chat.completions.create(...)
except Exception as e:
if hasattr(e, 'code') and e.code == 'BUDGET_EXCEEDED':
print("Budget limit reached - please upgrade or wait")
return None # Return early, don't bypass!
raise # Re-raise other errors
Features
- ✅ Zero-config instrumentation
- ✅ Accurate token & cost tracking
- ✅ Multi-provider support (OpenAI, Anthropic, Bedrock, Azure OpenAI, Mistral, Google AI)
- ✅ Rich metadata capture
- ✅ OpenTelemetry-based
- ✅ Cost Guard budget enforcement (blocks requests BEFORE spending)
Supported Providers
- OpenAI - GPT-4, GPT-5, Embeddings, DALL-E, Whisper, TTS
- Anthropic - Claude Sonnet, Claude Opus
- AWS Bedrock - Claude, Titan, and other Bedrock models
- Azure OpenAI - GPT models via Azure
- Mistral AI - Mistral models
- Google AI - Gemini Pro, Gemini Flash
Provider Examples
OpenAI
from agentbill import AgentBill
import openai
agentbill = AgentBill.init({"api_key": "your-api-key"})
client = agentbill.wrap_openai(openai.OpenAI(api_key="sk-..."))
response = client.chat.completions.create(
model="gpt-4",
messages=[{"role": "user", "content": "Hello!"}]
)
Anthropic
from agentbill import AgentBill
import anthropic
agentbill = AgentBill.init({"api_key": "your-api-key"})
client = agentbill.wrap_anthropic(anthropic.Anthropic(api_key="sk-ant-..."))
response = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=1024,
messages=[{"role": "user", "content": "Hello!"}]
)
AWS Bedrock
from agentbill import AgentBill
import boto3
agentbill = AgentBill.init({"api_key": "your-api-key"})
bedrock = agentbill.wrap_bedrock(boto3.client('bedrock-runtime'))
response = bedrock.invoke_model(
modelId='anthropic.claude-v2',
body=json.dumps({
"prompt": "Hello!",
"max_tokens_to_sample": 300
})
)
Azure OpenAI
from agentbill import AgentBill
from openai import AzureOpenAI
agentbill = AgentBill.init({"api_key": "your-api-key"})
client = agentbill.wrap_azure_openai(AzureOpenAI(
api_key="your-azure-key",
api_version="2024-02-01",
azure_endpoint="https://your-resource.openai.azure.com"
))
response = client.chat.completions.create(
model="gpt-4",
messages=[{"role": "user", "content": "Hello!"}]
)
Mistral AI
from agentbill import AgentBill
from mistralai import Mistral
agentbill = AgentBill.init({"api_key": "your-api-key"})
client = agentbill.wrap_mistral(Mistral(api_key="your-mistral-key"))
response = client.chat.complete(
model="mistral-large-latest",
messages=[{"role": "user", "content": "Hello!"}]
)
Google AI (Gemini)
from agentbill import AgentBill
import google.generativeai as genai
agentbill = AgentBill.init({"api_key": "your-api-key"})
genai.configure(api_key="your-google-key")
model = genai.GenerativeModel('gemini-pro')
wrapped_model = agentbill.wrap_google_ai(model)
response = wrapped_model.generate_content("Hello!")
Configuration
config = {
"api_key": "your-api-key", # Required
"base_url": "https://...", # Optional
"customer_id": "customer-123", # Optional
"debug": True # Optional
}
agentbill = AgentBill.init(config)
Publishing to PyPI
Prerequisites
- Create a PyPI account at https://pypi.org/account/register/
- Generate an API token at https://pypi.org/manage/account/token/
- Create
~/.pypircfile with your token:
[pypi]
username = __token__
password = pypi-YOUR_API_TOKEN_HERE
Publishing Steps
# Build the package
python setup.py sdist bdist_wheel
# Upload to PyPI
pip install twine
twine upload dist/*
GitHub Repository Setup
- Create your GitHub repository (e.g.,
agentbill-python-sdk) - Push all files (agentbill/, examples/, LICENSE, setup.py, README.md)
- Tag releases:
git tag v1.0.0 && git push origin v1.0.0 - Users can install with:
pip install agentbill-py-sdk
License
MIT
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 agentbill_py_sdk-7.8.0.tar.gz.
File metadata
- Download URL: agentbill_py_sdk-7.8.0.tar.gz
- Upload date:
- Size: 50.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c319e8a4ebd4ecf40075e33d0ad3d9a66414890699c34076de43b94fc63e7e79
|
|
| MD5 |
00ac74276d834ab8df57b5493627d2eb
|
|
| BLAKE2b-256 |
aaaa8667d985dacd986c168effa4e72d4968ae35e3196a145cb7a4e927867543
|
File details
Details for the file agentbill_py_sdk-7.8.0-py3-none-any.whl.
File metadata
- Download URL: agentbill_py_sdk-7.8.0-py3-none-any.whl
- Upload date:
- Size: 58.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
eee4538de7faf086cf326f2fb73337b8e99d777f7de72065988aab808dd0113d
|
|
| MD5 |
9c87b865348fd9a01229423d92799049
|
|
| BLAKE2b-256 |
cad99ecc45625186da74c779851a1bc95ae475ecafb8be4080fe864a288e062a
|