Agent Guard observability SDK for Python
Project description
AgentGuard SDK for Python
Install the package:
pip install agentguard
The distribution is named agentguard and exposes the onboarding API as
import agentguard.
Python version
- Python 3.10+ — full auto-instrumentation.
pip install agentguardpullstraceloop-sdk, so OpenAI / Anthropic / Gemini calls are traced with no per-call code. - Python 3.8 / 3.9 — installs and runs in manual mode.
traceloop-sdkrequires 3.10, so it is skipped automatically (PEP 508 marker) and the SDK falls back to manual export. Auto-instrumentation of providers is not available; usetrack()andrecord_generation(). Gemini sync is still traced by the SDK on 3.9; Gemini batch always usesrecord_generation()(see below). To force the extra explicitly on 3.10+:pip install "agentguard[auto]".
You normally leave AGENTGUARD_MODE=auto (the default) — the SDK downgrades to
manual only when traceloop is unavailable. context() / track() are optional
enrichment on top of either mode, not a switch into manual mode.
Environment
AGENTGUARD_HOST=https://agentgaurd-a0acc6egbhced0dc.centralindia-01.azurewebsites.net
AGENTGUARD_PUBLIC_KEY=pk-lf-...
AGENTGUARD_SECRET_KEY=sk-lf-...
APP_ENV=production
AGENTGUARD_MODE=auto
Optional:
# Drop infrastructure spans (DB, HTTP client, framework) at the exporter and
# keep only LLM/observation spans — reduces storage/egress. Default: false
# (full end-to-end agent traces are preserved).
AGENTGUARD_DROP_INFRA_SPANS=true
Compatibility env vars are also accepted:
AGENTGUARD_BASE_URL=https://agentgaurd-a0acc6egbhced0dc.centralindia-01.azurewebsites.net
AGENT_GUARD_BASE_URL=https://agentgaurd-a0acc6egbhced0dc.centralindia-01.azurewebsites.net
AGENT_GUARD_PUBLIC_KEY=pk-lf-...
AGENT_GUARD_SECRET_KEY=sk-lf-...
Use API keys from an existing AgentGuard project. The Python SDK does not create console organizations or projects; create or select the project in the console, then copy its public and secret keys into the environment.
Layer 1 — Base Observability
Initialize once at startup before creating LLM clients:
import agentguard
agentguard.init(service_name="my-service")
Then make LLM calls exactly as before:
from openai import OpenAI
resp = OpenAI().chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "Hello"}],
)
Optional Cohere/Mistral instrumentor warnings during startup are ignored by the
SDK. They do not block OpenAI or Gemini tracing when those clients are installed
and initialized after agentguard.init().
Layer 2 — Tenant Context
Set business/channel once per request:
with agentguard.context(
business_id="caratlane",
channel="instagram_dm",
session_id=conversation_id,
):
handle_message(message)
Layer 3 — Feature Attribution
Wrap each feature-level LLM call:
def handle_message(message):
with agentguard.track("sentiment"):
sentiment = run_sentiment(message)
with agentguard.track("reply"):
reply = run_reply(message)
track() emits groupable tags and filterable metadata:
business:*channel:*feature:*biz_channel:*biz_feat:*chan_feat:*biz_chan_feat:*
Gemini — sync vs batch
Sync calls (client.models.generate_content(...)) auto-trace on Python 3.9+.
Batch calls (client.batches.create(...)) are asynchronous — there are no
tokens at submit time, so auto-instrumentation cannot capture them. Record the
cost with record_generation() when you fetch the results:
for line in batch_results: # each line carries usage_metadata
um = line.response.usage_metadata
agentguard.record_generation(
feature="transcription",
model="gemini-2.5-flash", # must be in the pricing table or cost shows 0
input_tokens=um.prompt_token_count,
output_tokens=um.candidates_token_count,
) # business/channel/session inherit the surrounding context()
record_generation() also covers any call auto-instrumentation can't reach —
custom/REST providers or an SDK without an instrumentor. Cost is computed
server-side from the model name; standard models work out of the box, new or
custom model names are added once in the AgentGuard console.
Manual Smoke Test
Use manual mode to test export without real LLM calls:
AGENTGUARD_MODE=manual python examples/smoke_test_agentguard.py \
--business-id caratlane \
--channel instagram_dm \
--flow-id checkout-flow \
--feature-id sentiment
PowerShell:
$env:AGENTGUARD_MODE="manual"
python examples/smoke_test_agentguard.py `
--business-id caratlane `
--channel instagram_dm `
--flow-id checkout-flow `
--feature-id sentiment
Legacy API Compatibility
The older agentguard_sdk module is still included:
from agentguard_sdk import AgentGuard
New onboarding docs should use:
import agentguard
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 actaclad_agentguard-1.1.0.tar.gz.
File metadata
- Download URL: actaclad_agentguard-1.1.0.tar.gz
- Upload date:
- Size: 11.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
066814f9f345408e7406ec423c8eff39f12dd9fb8811bdbdc7d17d4af2f47a1e
|
|
| MD5 |
f1e4393b910bc6279cafdcab427b2cfe
|
|
| BLAKE2b-256 |
4febf2dfa7dedac5cf7c8a29758f2bb54fbf3f7d0fe7ac59bc0df122e2c5d993
|
File details
Details for the file actaclad_agentguard-1.1.0-py3-none-any.whl.
File metadata
- Download URL: actaclad_agentguard-1.1.0-py3-none-any.whl
- Upload date:
- Size: 13.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4cb5ab25a373987fdccad2116f74b73785c7f347c045ce8390c6560cd0e1f481
|
|
| MD5 |
fbb2bf7f62fa8ada76b17cbdb6fbc5fb
|
|
| BLAKE2b-256 |
bc082bab040f1c4e87ba79d9d83c91a239c1dacfcd5f2bd69f4fc09c220b2360
|