Skip to main content

spendguard-sdk

Python SDK for Agentic SpendGuard — the audit-chain spend control layer for LLM agents. Talks to the Agentic SpendGuard sidecar over Unix-domain-socket gRPC; gates each LLM / tool-call boundary through a Contract DSL evaluator and an atomic budget ledger with KMS-signed, immutable audit chain.

Install

# Core only (raw client, no framework integration)
pip install spendguard-sdk

# With the integration you need
# Pydantic-AI auto-install is temporarily fail-closed because
# CVE-2026-25580 affects pydantic-ai/pydantic-ai-slim before 1.56.0,
# and PyPI does not currently expose a fixed 1.56.0+ release.
# Install spendguard-sdk plus a vetted non-vulnerable pydantic-ai
# release when upstream publishes one.
pip install 'spendguard-sdk[langchain]'
pip install 'spendguard-sdk[langgraph]'
pip install 'spendguard-sdk[openai-agents]'

Quickstart (Pydantic-AI)

import asyncio
from pydantic_ai import Agent
from pydantic_ai.models.openai import OpenAIModel

from spendguard import SpendGuardClient, new_uuid7
from spendguard.integrations.pydantic_ai import (
    RunContext,
    SpendGuardModel,
    run_context,
)
from spendguard._proto.spendguard.common.v1 import common_pb2


async def main():
    client = SpendGuardClient(
        socket_path="/var/run/spendguard/adapter.sock",
        tenant_id="00000000-0000-4000-8000-000000000001",
    )
    await client.connect()
    await client.handshake()

    guarded = SpendGuardModel(
        inner=OpenAIModel("gpt-4o-mini"),
        client=client,
        budget_id="44444444-4444-4444-8444-444444444444",
        window_instance_id="55555555-5555-4555-8555-555555555555",
        unit=common_pb2.UnitRef(
            unit_id="66666666-6666-4666-8666-666666666666",
            token_kind="output_token",
            model_family="gpt-4",
        ),
        pricing=common_pb2.PricingFreeze(
            pricing_version="demo-pricing-v1",
            price_snapshot_hash=b"<32 bytes>",
            fx_rate_version="demo-fx-v1",
            unit_conversion_version="demo-units-v1",
        ),
        claim_estimator=lambda messages, settings: [
            common_pb2.BudgetClaim(
                budget_id="44444444-4444-4444-8444-444444444444",
                unit=common_pb2.UnitRef(
                    unit_id="66666666-6666-4666-8666-666666666666",
                    token_kind="output_token",
                    model_family="gpt-4",
                ),
                amount_atomic="500",
                direction=common_pb2.BudgetClaim.DEBIT,
                window_instance_id="55555555-5555-4555-8555-555555555555",
            )
        ],
    )

    agent = Agent(model=guarded)
    async with run_context(RunContext(run_id=str(new_uuid7()))):
        result = await agent.run("Say hello in three words.")
    print(result.output)


asyncio.run(main())

If a contract rule denies the call, agent.run(...) raises spendguard.DecisionStopped carrying reason_codes and matched_rule_ids.

API surface (core)

Symbol Purpose
SpendGuardClient UDS gRPC client to the sidecar
DecisionStopped, DecisionSkipped, ApprovalRequired per-decision exceptions
derive_idempotency_key(...) deterministic key from (tenant, run, step, llm_call, trigger)
new_uuid7() UUID v7 helper

Wire-protocol compatibility

This SDK pins to a specific protobuf wire version. Check the sidecar's published version against spendguard.__version__; minor versions are wire-compatible, major bumps are breaking. (Not yet enforced at handshake; planned for v0.2.)

License

Apache-2.0.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

spendguard_sdk-0.6.1.tar.gz (5.9 MB view details)

Uploaded Source

Built Distribution

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

spendguard_sdk-0.6.1-py3-none-any.whl (6.0 MB view details)

Uploaded Python 3

File details

Details for the file spendguard_sdk-0.6.1.tar.gz.

File metadata

  • Download URL: spendguard_sdk-0.6.1.tar.gz
  • Upload date:
  • Size: 5.9 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for spendguard_sdk-0.6.1.tar.gz
Algorithm Hash digest
SHA256 b6bccd0c15626f7f1f275e6ca0c36c1d4c97a8f70be965c58e5d8c3c78c0fda7
MD5 d64a2470942299e9bbbd6538f182f12f
BLAKE2b-256 4636cf352afb6752e15ccdfcd646479a3b236e63eeb73b84fd7202d0b0769a2f

See more details on using hashes here.

Provenance

The following attestation bundles were made for spendguard_sdk-0.6.1.tar.gz:

Publisher: sdk-publish.yml on m24927605/agentic-spendguard

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file spendguard_sdk-0.6.1-py3-none-any.whl.

File metadata

  • Download URL: spendguard_sdk-0.6.1-py3-none-any.whl
  • Upload date:
  • Size: 6.0 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for spendguard_sdk-0.6.1-py3-none-any.whl
Algorithm Hash digest
SHA256 9c929421fbe78a7e45643de761902c61911181415fd8ff9a5b365a400748a35b
MD5 67ae62c72e643e5be33c0abe428f9dd6
BLAKE2b-256 70e8a6fe4dcdf8a2520c67d1954d8d88631af6689fbe12ddd4f7930d08a777cf

See more details on using hashes here.

Provenance

The following attestation bundles were made for spendguard_sdk-0.6.1-py3-none-any.whl:

Publisher: sdk-publish.yml on m24927605/agentic-spendguard

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

0.6.1 This release

2 files

0.6.0

2 files

0.5.1

2 files

0.4.0

2 files

0.3.0

2 files

Supported by

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