Skip to main content

Python SDK for AI Agent Assembly - A governance-native runtime for AI agents

Project description

Agent Assembly Python SDK

PyPI version Python versions CI License: MIT

Python SDK for AI Agent Assembly — a governance-native runtime for AI agents. One init_assembly() call wires your agent into the policy gateway, applies pre-execution allow/deny on tool calls, and emits audit events without changing how the agent itself is written.

Why use it

  • Framework adapters for LangChain, LangGraph, CrewAI, OpenAI Agents, Pydantic AI, and MCP servers — drop in, no SDK rewrites required.
  • Pre-execution policy enforcement via the FrameworkAdapter ABC — block disallowed tool calls before they hit the LLM.
  • Audit trail — every tool call, prompt, and policy decision is emitted to the gateway with full agent lineage (parent / root / team).
  • Native PyO3 fast path (optional) — drop into a Rust runtime client when you need sub-millisecond policy checks.
  • Typed throughout — Pydantic models for every gateway payload, mypy strict on adapter base and registry.

Requirements

  • Python >=3.12,<4.0 (3.12, 3.13, 3.14 are tested in CI)
  • Rust toolchain (stable channel) — only required for building the optional native extension via maturin develop. Pure-Python users do not need Rust.
  • uv ≥ 0.4 — recommended for managing the dev environment. (pip works for plain installs.)

Installation

Use the SDK in your project

pip install agent-assembly

(Once published to PyPI. Until then, install directly from GitHub:)

pip install git+https://github.com/AI-agent-assembly/python-sdk.git

Develop on the SDK

Clone the repo and sync the dev environment with uv:

git clone https://github.com/AI-agent-assembly/python-sdk.git
cd python-sdk
uv sync

To build the optional PyO3 extension locally (requires Rust):

uv tool run maturin develop --manifest-path rust/aa-ffi-python/Cargo.toml --release

The pure-Python SDK works without the native extension — maturin develop is only needed if you want the sub-millisecond RuntimeClient fast path.

Quick Start

A governed LangChain ReAct agent that runs offline against a mock LLM. The example imports LangChain in addition to the SDK, so install both:

pip install agent-assembly langchain langchain-community
from langchain.agents import AgentExecutor, create_react_agent
from langchain.tools import Tool
from langchain_community.llms import FakeListLLM
from langchain_core.prompts import PromptTemplate

from agent_assembly import init_assembly

with init_assembly(
    gateway_url="http://localhost:8080",
    api_key="dev-key",
    agent_id="quickstart-agent",
    mode="sdk-only",
):
    llm = FakeListLLM(responses=[
        "Thought: I should look up the user.\nAction: whoami\nAction Input: alice\n",
        "Thought: I have the answer.\nFinal Answer: alice is in engineering\n",
    ])
    tools = [Tool(name="whoami", func=lambda name: f"{name} is in engineering", description="who")]
    prompt = PromptTemplate.from_template(
        "Use the tools.\n{tools}\nTool names: {tool_names}\nQ: {input}\n{agent_scratchpad}"
    )
    executor = AgentExecutor(agent=create_react_agent(llm, tools, prompt), tools=tools, max_iterations=2)
    print(executor.invoke({"input": "Which team is alice on?"})["output"])

What this does:

  1. init_assembly() registers the agent with the gateway and auto-loads the LangChain adapter — every tool call from now on goes through the policy gate.
  2. The FakeListLLM replays canned responses so the example runs offline with no real LLM.
  3. The with block tears down the gateway connection and unwinds adapter hooks on exit.

Public API

  • init_assembly(gateway_url, api_key, agent_id=None, mode="auto") -> AssemblyContext
  • GatewayClient.register_agent() -> dict
  • GatewayClient.check_policy_compliance(action: str) -> dict
  • Exceptions: AssemblyError, AgentError, PolicyError, GatewayError, ConfigurationError
  • Data models: AgentConfig, AgentState, PolicyEvaluation

Error Handling

from agent_assembly import init_assembly
from agent_assembly.exceptions import ConfigurationError

try:
    context = init_assembly(gateway_url="", api_key="my-api-key", agent_id="my-agent-001")
except ConfigurationError as exc:
    print(f"Invalid configuration: {exc}")

Development

Run tests:

uv run pytest

Run integration tests:

uv run pytest -m integration

Lint and type-check:

uv run ruff check .
uv run mypy agent_assembly

Native Core Extension (AAASM-55)

Build and install the PyO3 extension locally:

uv tool run maturin develop --manifest-path rust/aa-ffi-python/Cargo.toml --release

Validate native module import:

from agent_assembly._core import RuntimeClient, GovernanceEvent, PolicyResult

Run opt-in native integration tests:

AAASM_RUN_NATIVE_CORE_TESTS=1 uv run pytest test/integration/test_native_core_runtime.py
AAASM_RUN_MATURIN_TESTS=1 uv run pytest test/integration/test_native_core_maturin.py

Documentation

Contributing

Please read CONTRIBUTING.md before opening a PR — it covers dev environment setup, framework adapter authoring, the test/lint command list, branch naming, and the PR checklist.

License

MIT License

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

agent_assembly-0.0.1a5.tar.gz (68.8 kB view details)

Uploaded Source

Built Distributions

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

agent_assembly-0.0.1a5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.5 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

agent_assembly-0.0.1a5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (7.2 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

agent_assembly-0.0.1a5-cp312-cp312-macosx_11_0_arm64.whl (6.3 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

agent_assembly-0.0.1a5-cp312-cp312-macosx_10_12_x86_64.whl (6.8 MB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

File details

Details for the file agent_assembly-0.0.1a5.tar.gz.

File metadata

  • Download URL: agent_assembly-0.0.1a5.tar.gz
  • Upload date:
  • Size: 68.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for agent_assembly-0.0.1a5.tar.gz
Algorithm Hash digest
SHA256 4b307610c1c2ee48143905b4b115bfb3d213c4d2d93d3261f37fdc2544c9ab49
MD5 fad7fc1ced4593ba1afa3213d9604a71
BLAKE2b-256 9d29ff27e5c0106a4b6f750ab3c97eecf07ee3cb9e5c38204e9923f1b22f4cf7

See more details on using hashes here.

Provenance

The following attestation bundles were made for agent_assembly-0.0.1a5.tar.gz:

Publisher: release-python.yml on ai-agent-assembly/python-sdk

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

File details

Details for the file agent_assembly-0.0.1a5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for agent_assembly-0.0.1a5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0bd8417ea9a1176d9424f48cf1730a263d0ea61a177be96002e4c38a63ea5422
MD5 782d6bafc6dc44d2ce6ef7a913637442
BLAKE2b-256 c165edd34c4f09628a010f71ea19a69fd559d42fc4d06ffdb76064ba8f8ffd53

See more details on using hashes here.

Provenance

The following attestation bundles were made for agent_assembly-0.0.1a5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release-python.yml on ai-agent-assembly/python-sdk

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

File details

Details for the file agent_assembly-0.0.1a5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for agent_assembly-0.0.1a5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 c4228f7f448a89c7deba7cb82474ce8376f5e69c2ebcdd9bfb100a3879d739ce
MD5 8d1cc0ae091884701ebcd621b8c879eb
BLAKE2b-256 87a8af25d5309b7acfc90e118da53a225277645d1540667869620d50dd968e16

See more details on using hashes here.

Provenance

The following attestation bundles were made for agent_assembly-0.0.1a5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: release-python.yml on ai-agent-assembly/python-sdk

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

File details

Details for the file agent_assembly-0.0.1a5-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for agent_assembly-0.0.1a5-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 02a79a3fb67230a13a4c03d4ddf49b10f25d56eb79f960ea5859159c7aa1098b
MD5 76ac23d7b49175032d466d08bc3b9651
BLAKE2b-256 c3bb1c2e74c6fe4a572541460a7aa2cbe521f3b6dbbb61c7ddef5ec7891eb2a8

See more details on using hashes here.

Provenance

The following attestation bundles were made for agent_assembly-0.0.1a5-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: release-python.yml on ai-agent-assembly/python-sdk

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

File details

Details for the file agent_assembly-0.0.1a5-cp312-cp312-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for agent_assembly-0.0.1a5-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 8acb0ac2f4804125317fa1c9cca35be748cb8c651fba8a0fb51ea0ca21c996b1
MD5 f1ab897ffe75aa47afafd3273a1fda55
BLAKE2b-256 d39d17ce10ab63dc217c5da033cb927ad8c04fa13767612be0a600cf5af5add0

See more details on using hashes here.

Provenance

The following attestation bundles were made for agent_assembly-0.0.1a5-cp312-cp312-macosx_10_12_x86_64.whl:

Publisher: release-python.yml on ai-agent-assembly/python-sdk

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

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