Skip to main content

Universal Agent Interactive Protocol - Python SDK with a declarative framework to build Agentic AI Services

Project description

Universal Agent Interactive Protocol (UAIP)

GitHub   Discord   Book Demo   Community Sync

Build Status   License   Python

An open protocol for interoperability between autonomous agents and application services.

UAIP defines how autonomous agents interact with applications through explicit stages, workflows, and tasks. It guarantees invocation order and reliable execution, replacing ad-hoc prompting with verifiable contracts. UAIP is 78% more token efficient than existing protocols, eliminating context overflow and semantic loss.

Token Usage Error Rate

UAIP token efficiency across benchmarks

Quick Start

# Install UAIP SDK
pip install uaip

# Initialize a new workflow project
uaip init my-store

# Run the workflow server
cd my-store
python main.py

This starts a UAIP server at specified port that agents can interact with via /initialize and /execute.

Universal Agent Interactive Protocol

You control agent autonomy by specifying legal tasks at each stage and valid transitions between stages. For example: agents cannot checkout before adding items to cart. UAIP enforces these rules, validates prerequisites before task execution, and ensures agents follow your defined path through the application.


UAIP Example


Tasks

Tasks are the smallest granularity of callable business logic. Several tasks can be defined within 1 stage. Ensuring these tasks are avialable or callable at the stage.

@task(description="Add product to shopping cart")
def add_to_cart(self, state: State, product_id: str, quantity: int) -> dict:
    """Adds item to cart and updates state"""
    cart_items = state.get("cart.items", [])
    cart_items.append({"product_id": product_id, "quantity": quantity})
    state.set("cart.items", cart_items)
    return {"success": True, "cart_size": len(cart_items)}

Stages

A stage is a logical sub-step towards a goal, Stage can have several tasks grouped together, that an agent can call at a given point.

@stage(name="product")
class ProductStage:
    @task(description="Add product to shopping cart")
    def add_to_cart(self, state: State, product_id: str, quantity: int) -> dict:
        """Adds item to cart"""
        
    @task(description="Save product to wishlist")
    def add_to_wishlist(self, state: State, product_id: str) -> dict:
        """Saves item for later"""
        

State

A state is a global context that is maintained by the protocol, parts of which can get propagated to other stages as the agent transitions and navigates through stages.

# State persists across stages and tasks
state.set("cart.items", [{"product_id": "123", "quantity": 2}])
state.set("user.email", "user@example.com")
state.set("cart.total", 99.99)

# Retrieve state values
items = state.get("cart.items", [])
user_email = state.get("user.email")

Workflow

A workflow is a logic grouping of several stages, you can define graphs of stages which represent legal moves to other stages within workflow.

@workflow(name="shopping")
class ShoppingWorkflow:
    discovery = DiscoveryStage      # Search and filter products
    product = ProductStage          # View product details
    selection = SelectionStage      # Add to cart/wishlist
    cart = CartStage                # Manage cart items
    checkout = CheckoutStage        # Complete purchase
    
    transitions = {
        discovery: [product, selection],
        product: [selection, discovery],
        selection: [cart, discovery, product],
        cart: [checkout, selection, discovery],
        checkout: []
    }

Examples

Multi-Stage Workflow

@workflow(name="amazon_shopping")
class AmazonShoppingWorkflow:
    browse = BrowseStage         # Search and filter products
    select = SelectStage         # Add items to cart
    checkout = CheckoutStage     # Complete transaction
    
    transitions = {
        browse: [select],
        select: [browse, checkout],
        checkout: []
    }

Stage with Tasks

@stage(name="browse")
class BrowseStage:
    @task(description="Search for products by keyword")
    def search_products(self, state: State, query: str) -> dict:
        """Returns matching products"""
        
    @task(description="Filter products by price range")
    def filter_by_price(self, state: State, min_price: float, max_price: float) -> dict:
        """Filters current results by price"""
        
    @task(description="Sort products by rating or price")
    def sort_products(self, state: State, sort_by: str) -> dict:
        """Sorts: 'rating', 'price_low', 'price_high'"""

@stage(name="select")
class SelectStage:
    @task(description="Add product to shopping cart")
    def add_to_cart(self, state: State, product_id: str, quantity: int) -> dict:
        """Adds item to cart"""
        
    @task(description="Save product to wishlist")
    def add_to_wishlist(self, state: State, product_id: str) -> dict:
        """Saves item for later"""
        
    @task(description="Star product for quick access")
    def star_product(self, state: State, product_id: str) -> dict:
        """Stars item as favorite"""
        
    @task(description="View product details")
    def view_details(self, state: State, product_id: str) -> dict:
        """Shows full product information"""

Prerequisites

@stage(name="checkout", prerequisites=["cart.items", "user.payment_method"])
class CheckoutStage:
    @task(description="Apply discount code")
    def apply_discount(self, state: State, code: str) -> dict:
        """Validates and applies discount"""
        
    @task(description="Complete purchase")
    def complete_purchase(self, state: State) -> dict:
        """Processes payment and creates order"""

We are building the agentic web. Come join us.

Interested in contributing or building with UAIP? Reach out.

Interested in building apps that render in ChatGPT? Check out Concierge AI.

Contributing

Contributions are welcome. Please open an issue or submit a pull request.

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

uaip-0.1.4.tar.gz (41.3 kB view details)

Uploaded Source

Built Distribution

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

uaip-0.1.4-py3-none-any.whl (50.0 kB view details)

Uploaded Python 3

File details

Details for the file uaip-0.1.4.tar.gz.

File metadata

  • Download URL: uaip-0.1.4.tar.gz
  • Upload date:
  • Size: 41.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.8

File hashes

Hashes for uaip-0.1.4.tar.gz
Algorithm Hash digest
SHA256 76c8d61e5f9d602fa84871b0f19627999c971346be575ec4ef327ed7007cf50d
MD5 a0dae1d6dfc390df0823e6cc2410c612
BLAKE2b-256 72bba17f8a79011c09fa72aabf6d0c25387540dd4c50a888118bf8798da7d67b

See more details on using hashes here.

File details

Details for the file uaip-0.1.4-py3-none-any.whl.

File metadata

  • Download URL: uaip-0.1.4-py3-none-any.whl
  • Upload date:
  • Size: 50.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.8

File hashes

Hashes for uaip-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 e5e96039a5481ac73cd7758e2a7ea5d32275a07ede52114b0f889b9b77b1cdf3
MD5 3f286e39507f9693187b1f064f96c2fd
BLAKE2b-256 733349012096dda2c9d9a8bece8c46db162f4d9ebe37f32d457238ef4bf3fea5

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