xml-pipeline/xml_pipeline/llm/__init__.py
dullfig d0d78a9f70 Add usage persistence for billing (SQLite)
- UsageStore with async SQLite persistence via aiosqlite
- Background batch writer for non-blocking event persistence
- Auto-subscribes to UsageTracker for transparent capture
- Query methods: query(), get_billing_summary(), get_daily_usage()
- REST API endpoints: /usage/history, /usage/billing, /usage/daily
- Filtering by org_id, agent_id, model, time range
- 18 new tests for persistence layer

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 21:58:22 -08:00

93 lines
2.1 KiB
Python

"""
LLM abstraction layer.
Usage:
from xml_pipeline.llm import router
# Configure once at startup (or via organism.yaml)
router.configure_router({
"strategy": "failover",
"backends": [
{"provider": "xai", "api_key_env": "XAI_API_KEY"},
]
})
# Then anywhere in your code:
response = await router.complete(
model="grok-4.1",
messages=[{"role": "user", "content": "Hello"}],
thread_id=metadata.thread_id, # For budget enforcement
agent_id=metadata.own_name, # For usage tracking
)
Usage Tracking:
from xml_pipeline.llm import get_usage_tracker
tracker = get_usage_tracker()
# Subscribe to events for billing
tracker.subscribe(lambda event: billing_api.record(event))
# Query totals
totals = tracker.get_totals()
Usage Persistence (for billing):
from xml_pipeline.llm import get_usage_store
store = await get_usage_store()
# Query historical usage
events = await store.query(
start_time="2025-01-01T00:00:00Z",
org_id="org-123",
)
# Get billing summary
summary = await store.get_billing_summary(org_id="org-123")
"""
from xml_pipeline.llm.router import (
LLMRouter,
get_router,
configure_router,
complete,
Strategy,
)
from xml_pipeline.llm.backend import LLMRequest, LLMResponse, BackendError
from xml_pipeline.llm.usage_tracker import (
UsageTracker,
UsageEvent,
get_usage_tracker,
reset_usage_tracker,
)
from xml_pipeline.llm.usage_store import (
UsageStore,
BillingSummary,
get_usage_store,
close_usage_store,
reset_usage_store,
)
__all__ = [
# Router
"LLMRouter",
"get_router",
"configure_router",
"complete",
"Strategy",
# Backend
"LLMRequest",
"LLMResponse",
"BackendError",
# Usage tracking (in-memory)
"UsageTracker",
"UsageEvent",
"get_usage_tracker",
"reset_usage_tracker",
# Usage persistence (SQLite)
"UsageStore",
"BillingSummary",
"get_usage_store",
"close_usage_store",
"reset_usage_store",
]