Lightweight drop-in wrapper for the OpenAI Python client that logs telemetry and detects PII risks.
Project description
AgentWatch: Proactive LLM Governance Platform
AgentWatch is an ultra-low latency API proxy and SDK designed to solve the "runaway agent" problem for enterprise engineering teams. It intercepts, manages, and enforces budget constraints on LLM API requests at the edge, acting as a proactive governance layer between your application and upstream providers like OpenAI and Anthropic.
The Problem It Solves
As engineering teams adopt autonomous LLM agents (e.g., coding assistants, research bots, recursive planners), they face a critical financial vulnerability: the runaway loop.
If an agent gets stuck in a recursive error-correction loop, it can execute hundreds of API calls per minute. Because each iteration typically appends the previous output to the context window, the token size grows quadratically. This can result in a single stuck agent burning thousands of dollars in minutes—a scenario that passive monitoring tools will only report after the budget is already gone.
AgentWatch was rebuilt from the ground up to prevent this.
Core Features
1. Session-Aware Identity Tracking
Instead of treating API requests as isolated events, AgentWatch tracks iterative agent loops as Sessions.
- Every request is tagged with a
session_idand aniteration_index. - The cumulative token count for a session is securely computed and maintained server-side on Cloudflare KV. This ensures that even if a local agent process crashes, restarts, or runs in parallel, the session's financial state cannot be bypassed or reset.
2. Synchronous Pre-Call Budget Enforcement
AgentWatch acts as a strict financial gatekeeper for agent sessions.
- Developers define a budget ceiling (e.g.,
$2.00) per session via the AgentWatch Python SDK. - Before any upstream LLM call is made, the SDK performs a sub-millisecond synchronous pre-flight check to the Edge Proxy (
GET /v1/budget-check). - If the session's cumulative token cost exceeds the limit, the SDK instantly blocks the execution and raises an
AgentBudgetExceededexception. - Fail-Open Resilience: By default, if the AgentWatch proxy experiences downtime, the budget check silently fails open. This ensures our infrastructure never causes a hard outage for your production traffic.
3. Inline Anomaly Detection
AgentWatch heuristically detects runaway behavior before the budget is even exhausted.
- The Cloudflare Edge Worker maintains a rolling window of the last 5 iterations for every active session inside Cloudflare KV.
- It calculates the token growth ratio synchronously on the
POST /v1/ingesthandler. - If three consecutive iterations show a
>1.4xprompt growth—a hallmark signature of a context-appending loop—it asynchronously fires a Slack webhook alert viactx.waitUntil(), adding zero latency to the critical API path.
4. Zero-Latency Proxying & Resilient Telemetry
- Ultra-Low Latency: The hot path of the proxy only handles authentication, routing, and credential rewriting.
- Asynchronous Telemetry: Payload logging and risk scanning are offloaded to background execution. The client receives the provider's response immediately.
- Cloudflare Queues: Telemetry data is pushed to a highly-available Cloudflare Queue before being batch-inserted into Supabase Postgres. This guarantees telemetry delivery even if the database goes down.
Routes
The proxy mirrors provider API paths under /v1/proxy/:provider/*.
POST /v1/proxy/openai/chat/completions
-> https://api.openai.com/v1/chat/completions
POST /v1/proxy/anthropic/messages
-> https://api.anthropic.com/v1/messages
Authentication
Clients authenticate to AgentWatch with a bearer token:
Authorization: Bearer aw_test_token
The Worker maps that token to a tenant ID with TENANT_TOKEN_MAP.
{
"aw_test_token": "tenant_test"
}
The client token is never forwarded upstream. AgentWatch replaces it with the configured OpenAI or Anthropic provider key.
Required Secrets
Configure secrets before deploying:
wrangler secret put OPENAI_API_KEY
wrangler secret put ANTHROPIC_API_KEY
wrangler secret put SUPABASE_SERVICE_ROLE_KEY
wrangler secret put TENANT_TOKEN_MAP
wrangler secret put SLACK_WEBHOOK_URL
Configure non-secret values in wrangler.toml:
SUPABASE_URL = "https://YOUR_PROJECT.supabase.co"
ANTHROPIC_VERSION = "2023-06-01"
Supabase Setup
Run supabase/schema.sql and supabase/session_tracking.sql in the Supabase SQL editor. Enable the retention policy by running supabase/retention_cron.sql.
Python SDK Integration
AgentWatch integrates seamlessly via composition with standard OpenAI client wrappers:
from agentwatch import WatchedOpenAI
client = WatchedOpenAI(
agentwatch_api_key="your_aw_key",
agentwatch_project="checkout-service",
agentwatch_team="payments-eng",
agentwatch_session_id="ci-run-123",
agentwatch_session_budget_usd=2.00, # Strict $2 limit
agentwatch_enforcement_mode=True
)
# Standard OpenAI API usage
response = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "Refactor this module..."}]
)
Local Development
Install dependencies:
npm install
Run the Worker locally:
npm run dev
Typecheck:
npm run typecheck
Deploy:
npm run deploy
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 aw_sdk-0.1.1.tar.gz.
File metadata
- Download URL: aw_sdk-0.1.1.tar.gz
- Upload date:
- Size: 10.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7a14624d4bc49ef67c0bf250e68988aec349a51c567900ed166aab9bb75ad105
|
|
| MD5 |
4846b4c4a629f84663f7c1c077b49adf
|
|
| BLAKE2b-256 |
61bec5c0ac36315085ff2556e038a1c6d18a8869234541c99b43669970ff1559
|
File details
Details for the file aw_sdk-0.1.1-py3-none-any.whl.
File metadata
- Download URL: aw_sdk-0.1.1-py3-none-any.whl
- Upload date:
- Size: 8.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
74fa0b203520b087fce2be74cad4974ef2359008b372899ad767f6481ac27f03
|
|
| MD5 |
302558e2bdfd1e7a714f9ea56e307be3
|
|
| BLAKE2b-256 |
c648ed6dc02e975816256d7fe5c9fd24d5c0a88ea55edc06a67121bb269f8a57
|