Skip to main content

Enterprise Python SDK for AI guardrails, PII protection, and telemetry logging.

Project description

agentid-sdk (Python)

PyPI version Python Python >=3.9 License: MIT

1. Introduction

agentid-sdk is the official Python SDK for AgentID, an AI security and compliance System of Record. It lets you enforce guardrails before model execution, capture immutable telemetry for auditability, and integrate security checks into OpenAI and LangChain workflows with minimal code.

The Mental Model

AgentID sits between your application and the LLM runtime:

User Input -> guard() -> [AgentID Policy] -> verdict
                              | allowed
                              v
                         LLM Provider
                              v
                           log() -> [Immutable Ledger]
  • guard(): evaluates prompt and context before model execution.
  • Model call: executes only if guard verdict is allowed.
  • log(): persists immutable telemetry (prompt, output, latency) for audit and compliance.

2. Installation

pip install agentid-sdk

Optional extras:

pip install "agentid-sdk[pii]"
pip install "agentid-sdk[security]"

If you enable Presidio/spaCy-backed PII detection, install the spaCy language model:

pip install "agentid-sdk[pii]"
python -m spacy download en_core_web_lg

3. Prerequisites

  1. Create an AgentID account at https://app.getagentid.com.
  2. Create an AI system and copy:
    • AGENTID_API_KEY (for example sk_live_...)
    • AGENTID_SYSTEM_ID (UUID)
  3. If using OpenAI/LangChain, set:
    • OPENAI_API_KEY
export AGENTID_API_KEY="sk_live_..."
export AGENTID_SYSTEM_ID="00000000-0000-0000-0000-000000000000"
export OPENAI_API_KEY="sk-proj-..."

Compatibility

  • Node.js: v18+ / Python: 3.9+ (cross-SDK matrix)
  • Thread Safety: AgentID clients are thread-safe and intended to be instantiated once and reused across concurrent requests.
  • Latency: async log() is non-blocking for model execution paths; sync guard() typically adds network latency (commonly ~50-100ms, environment-dependent).

4. Quickstart

import os
from agentid import AgentID

agent = AgentID()  # auto-loads AGENTID_API_KEY
system_id = os.environ["AGENTID_SYSTEM_ID"]

verdict = agent.guard(
    input="Summarize this support ticket.",
    system_id=system_id,
    model="gpt-4o-mini",
    user_id="quickstart-user",
)
if not verdict.get("allowed", False):
    raise RuntimeError(f"Blocked: {verdict.get('reason')}")

agent.log(
    system_id=system_id,
    input="Summarize this support ticket.",
    output="Summary generated.",
    model="gpt-4o-mini",
    event_id=verdict.get("client_event_id"),
    metadata={"agent_role": "support-assistant"},
)
print("Guard allowed + telemetry logged")

5. Core Integrations

OpenAI Wrapper

import os
from openai import OpenAI
from agentid import AgentID, SecurityBlockError

agent = AgentID(pii_masking=True)
openai = OpenAI(api_key=os.environ["OPENAI_API_KEY"])
secured = agent.wrap_openai(
    openai,
    system_id=os.environ["AGENTID_SYSTEM_ID"],
    user_id="customer-123",
)

try:
    response = secured.chat.completions.create(
        model="gpt-4o-mini",
        messages=[{"role": "user", "content": "What is the capital of the Czech Republic?"}],
    )
    print(response.choices[0].message.content)
except SecurityBlockError as exc:
    print("Blocked by AgentID:", exc.reason)

Scope note: AgentID compliance/risk controls apply to the specific SDK-wrapped LLM calls (guard(), wrap_openai(), LangChain callback-wrapped flows). They do not automatically classify unrelated code paths in your whole monolithic application.

LangChain Integration

pip install agentid-sdk openai langchain langchain-openai
import os
from langchain_core.prompts import PromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_openai import ChatOpenAI
from agentid import AgentID, AgentIDCallbackHandler

agent = AgentID()
handler = AgentIDCallbackHandler(agent, system_id=os.environ["AGENTID_SYSTEM_ID"])

prompt = PromptTemplate.from_template("Answer in one sentence: {question}")
model = ChatOpenAI(model="gpt-4o-mini", api_key=os.environ["OPENAI_API_KEY"])
chain = prompt | model | StrOutputParser()

result = chain.invoke(
    {"question": "What is the capital of the Czech Republic?"},
    config={"callbacks": [handler]},
)
print(result)

Raw Ingest API (Telemetry Only)

import os
from agentid import AgentID

agent = AgentID()
agent.log(
    system_id=os.environ["AGENTID_SYSTEM_ID"],
    event_type="complete",
    severity="info",
    model="gpt-4o-mini",
    input="Raw telemetry prompt",
    output='{"ok": true}',
    metadata={"agent_role": "batch-worker", "channel": "manual_ingest"},
)

6. Advanced Configuration

Custom identity / role metadata

Use user_id for actor identity and metadata for additional context (for example agent_role, environment, trace IDs).

verdict = agent.guard(
    input="Process user request",
    system_id=system_id,
    user_id="service:billing-agent",
)
agent.log(
    system_id=system_id,
    input="Process user request",
    output="Done",
    model="gpt-4o-mini",
    metadata={"agent_role": "billing-agent", "environment": "prod"},
)

Timeouts

agent = AgentID(
    guard_timeout_s=10.0,
    ingest_timeout_s=10.0,
    strict_mode=True,  # fail-closed on connectivity/timeouts
)

Error Handling & Strict Mode

By default, AgentID is designed to keep your application running if the AgentID API has a timeout or is temporarily unreachable.

Mode Connectivity Failure LLM Execution Best For
Default (Strict Off) API Timeout / Unreachable Fail-Open (continues) Standard SaaS, chatbots
Strict Mode (strict_mode=True) API Timeout / Unreachable Fail-Closed (blocks) Healthcare, FinTech, high-risk
  • guard() returns a verdict (allowed, reason); handle deny paths explicitly.
  • Wrapped OpenAI/LangChain flows raise SecurityBlockError when a prompt is blocked.
  • If strict_mode is not explicitly set in SDK code, runtime behavior follows the system configuration from AgentID (strict_security_mode / failure_mode).
  • Ingest retries transient failures (5xx/429) and logs warnings if persistence fails.

Event Identity Model

For consistent lifecycle correlation in Activity/Prompts, use this model:

  • client_event_id: external correlation ID for one end-to-end action.
  • guard_event_id: ID of the preflight guard event returned by guard().
  • event_id on log(): idempotency key for ingest. In the Python SDK it is canonicalized to client_event_id for stable one-row lifecycle updates.

SDK behavior:

  • guard() sends client_event_id and returns canonical client_event_id + guard_event_id.
  • log() sends:
    • event_id = canonical client_event_id
    • metadata.client_event_id
    • metadata.guard_event_id (when available from wrappers/callbacks)
    • x-correlation-id = client_event_id
  • SDK requests include x-agentid-sdk-version for telemetry/version diagnostics.

This keeps Guard + Complete linked under one correlation key while preserving internal event linkage in the dashboard.

Policy-Pack Runtime Telemetry

When the backend uses compiled policy packs, runtime metadata includes:

  • policy_pack_version: active compiled artifact version.
  • policy_pack_fallback: true means fallback detector path was used.
  • policy_pack_details: optional diagnostic detail for fallback/decision trace.

Latency interpretation:

  • Activity Latency (ms) maps to synchronous processing (processing_time_ms).
  • Async AI audit time is separate (ai_audit_duration_ms) and can be higher.
  • First request after warm-up boundaries can be slower than steady-state requests.

Monorepo QA Commands (Maintainers)

If you are validating runtime in the AgentID monorepo:

npm run qa:policy-pack-bootstrap -- --base-url=http://127.0.0.1:3000/api/v1 --system-id=<SYSTEM_UUID>
npm run bench:policy-pack-hotpath

PowerShell diagnostics:

powershell -ExecutionPolicy Bypass -File .\scripts\qa\run-guard-diagnostic.ps1 -BaseUrl http://127.0.0.1:3000/api/v1 -ApiKey $env:AGENTID_API_KEY -SystemId $env:AGENTID_SYSTEM_ID -SkipBenchmark
powershell -ExecutionPolicy Bypass -File .\scripts\qa\run-ai-label-audit-check.ps1 -BaseUrl http://127.0.0.1:3000/api/v1 -ApiKey $env:AGENTID_API_KEY -SystemId $env:AGENTID_SYSTEM_ID -Model gpt-4o-mini

7. Security & Compliance

  • Optional local-first reversible PII masking via PIIManager and pii_masking=True.
  • Prompt-injection scanning and policy enforcement run before model dispatch.
  • Telemetry logging is async/fire-and-forget to minimize app latency.
  • Designed for server, serverless, and background-worker runtimes.
  • Supports compliance workflows requiring complete prompt/output traceability.

8. Support

  • Dashboard: https://app.getagentid.com
  • Repository: https://github.com/ondrejsukac-rgb/agentid/tree/main/python-sdk
  • Issues: https://github.com/ondrejsukac-rgb/agentid/issues

9. Publishing Notes (PyPI)

PyPI renders this README.md as package long description.

setup.py projects

from setuptools import setup

with open("README.md", "r", encoding="utf-8") as fh:
    long_description = fh.read()

setup(
    name="agentid-sdk",
    long_description=long_description,
    long_description_content_type="text/markdown",
)

pyproject.toml projects

readme = { file = "README.md", content-type = "text/markdown" }

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

agentid_sdk-0.1.17.tar.gz (38.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

agentid_sdk-0.1.17-py3-none-any.whl (42.7 kB view details)

Uploaded Python 3

File details

Details for the file agentid_sdk-0.1.17.tar.gz.

File metadata

  • Download URL: agentid_sdk-0.1.17.tar.gz
  • Upload date:
  • Size: 38.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.3

File hashes

Hashes for agentid_sdk-0.1.17.tar.gz
Algorithm Hash digest
SHA256 a282518344eb325f6155fd841569aea5d2c099d99142b2853346fbd82660ed5a
MD5 3e6a4af734c5801aec16604aed870f46
BLAKE2b-256 18f98537fac51670651482d26d42b01b751ab20e6b101d714ae4f84845548d0a

See more details on using hashes here.

File details

Details for the file agentid_sdk-0.1.17-py3-none-any.whl.

File metadata

  • Download URL: agentid_sdk-0.1.17-py3-none-any.whl
  • Upload date:
  • Size: 42.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.3

File hashes

Hashes for agentid_sdk-0.1.17-py3-none-any.whl
Algorithm Hash digest
SHA256 60376b621aa0b20ef72dce0896d1ea4aa296177ac6eb47e4a75298e4180eba7e
MD5 f797cd85736abe592e9fcbfb7d5bf1f3
BLAKE2b-256 1d11ac3aa4f7d1b62ab70b7497df53797e81cb20d76d4e21a6673db95190fa8d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page