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!"}]
)
Features
- ✅ Zero-config instrumentation
- ✅ Accurate token & cost tracking
- ✅ Multi-provider support (OpenAI, Anthropic, Bedrock, Azure OpenAI, Mistral, Google AI)
- ✅ Rich metadata capture
- ✅ OpenTelemetry-based
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
agentbill_py_sdk-7.2.0.tar.gz
(37.7 kB
view details)
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.2.0.tar.gz.
File metadata
- Download URL: agentbill_py_sdk-7.2.0.tar.gz
- Upload date:
- Size: 37.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
353c3e01e44f93855b794ed57bec9ddcd4ff3f88611a951a010f2ecca330d520
|
|
| MD5 |
2572d2993072b6dbfc9352693d373821
|
|
| BLAKE2b-256 |
c14dbfa38ceceee2f193326bb9842955c69438c5a2d6751aed09a9e265fe3251
|
File details
Details for the file agentbill_py_sdk-7.2.0-py3-none-any.whl.
File metadata
- Download URL: agentbill_py_sdk-7.2.0-py3-none-any.whl
- Upload date:
- Size: 40.3 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 |
d6b63cbe7f1b1da6d1f2d864f320c3d5e3da54e3ce5dc68ba9b4d0296feea670
|
|
| MD5 |
e846a8007cb8c111150a9db4dd68bb49
|
|
| BLAKE2b-256 |
fee6902e437d4af630ba1a822399c7e25be81470ac622dbea9f3349e19edef74
|