Skip to main content

ag-ui-protocol

Python SDK for the Agent-User Interaction (AG-UI) Protocol.

ag-ui-protocol provides Python developers with strongly-typed data structures and event encoding for building AG-UI compatible agent servers. Built on Pydantic for robust validation and automatic camelCase serialization for seamless frontend integration.

Installation

pip install ag-ui-protocol
poetry add ag-ui-protocol
pipenv install ag-ui-protocol

Features

  • 🐍 Python-native – Idiomatic Python APIs with full type hints and validation
  • 📋 Pydantic models – Runtime validation and automatic JSON serialization
  • 🔄 Streaming events – 16 core event types for real-time agent communication
  • High performance – Efficient event encoding for Server-Sent Events

Quick example

from ag_ui.core import TextMessageContentEvent, EventType
from ag_ui.encoder import EventEncoder

# Create a streaming text event
event = TextMessageContentEvent(
    type=EventType.TEXT_MESSAGE_CONTENT,
    message_id="msg_123",
    delta="Hello from Python!"
)

# Encode for HTTP streaming
encoder = EventEncoder()
sse_data = encoder.encode(event)
# Output: data: {"type":"TEXT_MESSAGE_CONTENT","messageId":"msg_123","delta":"Hello from Python!"}\n\n

Multimodal user message

from ag_ui.core import UserMessage, TextInputContent, ImageInputPart, InputContentUrlSource

message = UserMessage(
    id="user-123",
    content=[
        TextInputContent(text="Please describe this image"),
        ImageInputPart(
            source=InputContentUrlSource(
                value="https://example.com/cat.png",
                mime_type="image/png",
            )
        ),
    ],
)

payload = message.model_dump(by_alias=True)
# {"id": "user-123", "role": "user", "content": [...]}

BinaryInputContent is deprecated. Use modality-specific input parts (ImageInputPart, AudioInputPart, VideoInputPart, DocumentInputPart) with InputContentDataSource or InputContentUrlSource.

Optional fields with no value are left out

Serializing an AG-UI type omits every optional field that has no value instead of writing it as null — matching what a TypeScript producer puts on the wire. This is built into the base model, so it holds on every path (model_dump, model_dump_json, nesting inside another model, the EventEncoder) and you do not need to pass exclude_none=True:

from ag_ui.core import ToolCallStartEvent

ToolCallStartEvent(tool_call_id="tc_1", tool_call_name="search").model_dump_json(by_alias=True)
# {"type":"TOOL_CALL_START","toolCallId":"tc_1","toolCallName":"search"}
# note: no "parentMessageId": null

null as an actual value is untouched: a required field holding None, a None inside a dict or list (an individual metadata value, a JSON Patch replace with null), and any extra field all serialize as null.

Packages

  • ag_ui.core – Types, events, and data models for AG-UI protocol
  • ag_ui.encoder – Event encoding utilities for HTTP streaming

Documentation

Contributing

Bug reports and pull requests are welcome! Please read our contributing guide first.

License

MIT © 2025 AG-UI Protocol Contributors

Release files for ag-ui-protocol 0.1.22

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ag-ui-protocol 0.1.22
File Size Uploaded
ag_ui_protocol-0.1.22.tar.gz 18.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for ag-ui-protocol 0.1.22
File Interpreter ABI Platform
ag_ui_protocol-0.1.22-py3-none-any.whl Python 3 none any Details

Total release size: 40.2 kB

Release files / ag_ui_protocol-0.1.22.tar.gz

Download URL ag_ui_protocol-0.1.22.tar.gz
Size 18.1 kB
Tags Source
SHA-256 checksum
How to use checksums
d21f265284a50d9fc87ad7bcbd58f737b4b16eef7b5375f13a6e925117b52046
BLAKE2b-256 checksum
How to use checksums
e8f79bf788e7d3608725d022a248a58427040f4f930ab87ddb54bd29ee4d9a51
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.1 {"installer":{"name":"uv","version":"0.12.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / ag_ui_protocol-0.1.22-py3-none-any.whl

Download URL ag_ui_protocol-0.1.22-py3-none-any.whl
Size 22.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
fca13ee7820f8f53e869c19e09ddd75826c1799b27c2adb6f2e567295433c704
BLAKE2b-256 checksum
How to use checksums
be6caf3d577e68c9474c99600e65b2c6283772aae187edca6f0f2f5cbd9f565a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.1 {"installer":{"name":"uv","version":"0.12.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page