Auto-capture OpenAI and Anthropic LLM calls for warehousing and observability
Project description
LLM Warehouse
🏠 Auto-capture OpenAI and Anthropic LLM calls for warehousing
A lightweight Python library that automatically logs all your OpenAI and Anthropic API calls to various storage backends, including your own Flask app, Supabase, or local files.
🚀 Quick Start
Installation
pip install llm-warehouse
Or for the latest development version:
pip install git+https://github.com/sinanozdemir/llm-warehouse.git
Basic Usage
For automatic patching on import, set environment variables:
export LLM_WAREHOUSE_API_KEY="your-warehouse-api-key"
export LLM_WAREHOUSE_URL="https://your-warehouse.com"
Then just import any LLM library AFTER importing this package - logging happens automatically:
import llm_warehouse # BEFORE openai or anthropic
import openai # Automatically patched!
# or
import anthropic # Automatically patched!
Sample usage:
import llm_warehouse
# Now use OpenAI/Anthropic normally - all calls are automatically logged!
import openai
client = openai.Client()
response = client.chat.completions.create(
model="gpt-4.1-mini",
messages=[{"role": "user", "content": "Hello!"}]
)
📊 What Gets Logged
- Request data: Model, messages, parameters
- Response data: Completions, token usage, timing
- Metadata: Timestamps, SDK method, streaming info
- Errors: API errors and exceptions
🔧 Configuration Options
🛡️ Environment Variables
| Variable | Description |
|---|---|
LLM_WAREHOUSE_API_KEY |
Your warehouse API token (enables auto-patching) |
LLM_WAREHOUSE_URL |
Your warehouse URL |
🔄 Programmatic Control (for advanced users)
import llm_warehouse
# Enable logging
llm_warehouse.patch(warehouse_url="...", api_key="...")
# Disable logging
llm_warehouse.unpatch()
# Check status
if llm_warehouse.is_patched():
print("LLM calls are being logged")
🏗️ Backend Options
API Warehouse Backend
Use with the included API (recommended):
llm_warehouse.patch(
warehouse_url="https://your-warehouse.com",
api_key="your-warehouse-api-key"
)
Supabase Backend
Direct integration with Supabase:
llm_warehouse.patch(
supabase_url="https://your-project.supabase.co",
supabase_key="your-supabase-anon-key"
)
Local File Backend
For development and testing:
llm_warehouse.patch(log_file="llm_calls.jsonl")
📦 Features
- ✅ Zero-configuration: Works out of the box with environment variables
- ✅ Multiple backends: Flask warehouse, Supabase, local files
- ✅ Async support: Full async/await compatibility
- ✅ Streaming support: Captures streaming responses
- ✅ Error handling: Logs API errors and exceptions
- ✅ Minimal overhead: Designed for production use
- ✅ Thread-safe: Works in multi-threaded applications
🧪 Development
git clone https://github.com/sinanozdemir/llm-warehouse.git
cd llm-warehouse/llm-warehouse-package
pip install -e ".[dev]"
Run tests:
pytest
Format code:
black llm_warehouse/
isort llm_warehouse/
📝 License
MIT License - see LICENSE file for details.
Project details
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 llm_warehouse-0.1.3.tar.gz.
File metadata
- Download URL: llm_warehouse-0.1.3.tar.gz
- Upload date:
- Size: 14.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
295285efb62cb6e7c445ad9391ea6f313550330a561ab640719e7f22ff1be393
|
|
| MD5 |
1b8b5b3c40cdc83e0429b37488b47872
|
|
| BLAKE2b-256 |
dfff930ed78b2267ddb8cd347a871d4afa4c8e2054ab309c68a22d868cd45efd
|
File details
Details for the file llm_warehouse-0.1.3-py3-none-any.whl.
File metadata
- Download URL: llm_warehouse-0.1.3-py3-none-any.whl
- Upload date:
- Size: 14.1 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 |
c97f00f77d2097b747f8d276eeacb5e06969e7989887662b11bcd7e73526e449
|
|
| MD5 |
f09ca8eefb9e2f523b4554a6b53b9473
|
|
| BLAKE2b-256 |
e2b4e66f206ba8a17f3924828bf7fdac90c1d89f414a36fceb6c63afc0edb318
|