Skip to main content

Python client for Assistant UI sync server API

Project description

Assistant UI Sync Server API

A Python client library for interacting with Assistant UI sync server backends, providing the same API structure as the JavaScript/TypeScript useChatRuntime.

Installation

pip install assistant-ui-sync-server-api

Or using uv:

uv add assistant-ui-sync-server-api

Usage

Basic Example

import asyncio
from assistant_ui import AssistantClient

# Create a client
client = AssistantClient(base_url="https://api.example.com")

# Create messages
messages = [
    {
        "role": "user",
        "content": [{"type": "text", "text": "Hello, how are you?"}]
    }
]

# Send a chat request to a specific thread
async def main():
    thread = client.threads("thread-123")
    response = await thread.chat(
        messages=messages,
        system="You are a helpful assistant."
    )
    print(response.json())
    await client.close()

asyncio.run(main())

Using Context Managers

# Async context manager
async with AssistantClient(base_url="https://api.example.com") as client:
    thread = client.threads("thread-123")
    response = await thread.chat(messages=messages)

# Sync context manager
with AssistantClient(base_url="https://api.example.com") as client:
    thread = client.threads("thread-123")
    response = thread.chat_sync(messages=messages)

Authentication

# Static headers
client = AssistantClient(
    base_url="https://api.example.com",
    headers={"Authorization": "Bearer your-token"}
)

# Dynamic headers (async)
async def get_auth_headers():
    token = await fetch_token()
    return {"Authorization": f"Bearer {token}"}

client = AssistantClient(
    base_url="https://api.example.com",
    headers=get_auth_headers
)

Using Tools

tools = {
    "get_weather": {
        "description": "Get the current weather for a location",
        "parameters": {
            "type": "object",
            "properties": {
                "location": {"type": "string"},
                "unit": {"type": "string", "enum": ["celsius", "fahrenheit"]}
            },
            "required": ["location"]
        }
    }
}

thread = client.threads("thread-123")
response = await thread.chat(
    messages=messages,
    tools=tools
)

Canceling Operations

thread = client.threads("thread-123")

# Start a long-running chat
chat_task = asyncio.create_task(thread.chat(messages=messages))

# Cancel it
await thread.cancel()
chat_task.cancel()

Message Types

The package supports various message types matching the Assistant UI format:

from assistant_ui.types import Message

# Text message
text_message: Message = {
    "role": "user",
    "content": [{"type": "text", "text": "Hello!"}]
}

# Image message
image_message: Message = {
    "role": "user",
    "content": [
        {"type": "text", "text": "What's in this image?"},
        {"type": "image", "image": "https://example.com/image.jpg"}
    ]
}

# File message
file_message: Message = {
    "role": "user",
    "content": [
        {"type": "file", "data": "https://example.com/file.pdf", "mimeType": "application/pdf"}
    ]
}

# Assistant message with tool calls
assistant_message: Message = {
    "role": "assistant",
    "content": [
        {"type": "text", "text": "I'll help you with that."},
        {
            "type": "tool-call",
            "toolCallId": "call-123",
            "toolName": "get_weather",
            "args": {"location": "San Francisco"}
        }
    ]
}

# Tool result message
tool_message: Message = {
    "role": "tool",
    "content": [
        {
            "type": "tool-result",
            "toolCallId": "call-123",
            "toolName": "get_weather",
            "result": {"temperature": 72, "condition": "sunny"},
            "isError": False
        }
    ]
}

API Reference

AssistantClient

Main client for interacting with Assistant UI backends.

Constructor:

AssistantClient(
    base_url: str,
    headers: Optional[Dict[str, str] | Callable] = None,
    timeout: Optional[float] = None,
    **kwargs
)

Methods:

  • threads(thread_id: str) -> ThreadClient: Get a ThreadClient for a specific thread
  • close(): Close the async client
  • close_sync(): Close the sync client

ThreadClient

Client for interacting with a specific thread.

Methods:

  • chat(messages, system=None, tools=None, **kwargs): Send an async chat request
  • chat_sync(messages, system=None, tools=None, **kwargs): Send a sync chat request
  • cancel(): Cancel the current async operation
  • cancel_sync(): Cancel the current sync operation

Type Definitions

The package includes TypedDict definitions for all message types and configuration options, providing full type hints for better IDE support and type checking.

Development

This package is part of the Assistant UI monorepo. To contribute:

  1. Clone the main repository
  2. Navigate to python/assistant-ui
  3. Install dependencies with uv sync
  4. Run tests with uv run pytest

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

assistant_ui_sync_server_api-0.1.1.tar.gz (10.6 kB view details)

Uploaded Source

Built Distribution

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

assistant_ui_sync_server_api-0.1.1-py3-none-any.whl (7.9 kB view details)

Uploaded Python 3

File details

Details for the file assistant_ui_sync_server_api-0.1.1.tar.gz.

File metadata

File hashes

Hashes for assistant_ui_sync_server_api-0.1.1.tar.gz
Algorithm Hash digest
SHA256 329862f9b0178e5dabb823e21708fcbd80ef130b23c93d8ae66b9b5c6a3cd75a
MD5 baf86ed5ea149ec4d40f89fd7bcbd1ab
BLAKE2b-256 3dfdfde82831714ad4df22560118f04e450cc3942c1b9d8d930f37a912f12ac4

See more details on using hashes here.

File details

Details for the file assistant_ui_sync_server_api-0.1.1-py3-none-any.whl.

File metadata

File hashes

Hashes for assistant_ui_sync_server_api-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 ecef5f6c136f494659bd48e1f85318d19cf084e80635d114e38da23b76a07045
MD5 2089128494e5bf633a6b4343f11c8890
BLAKE2b-256 92c1581ff5859ee54869e9d1d240619c2e4b2fb22077baae5de0a95992cdd6d7

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