Back to Copilotkit

Overview

showcase/shell-docs/src/content/ag-ui/sdk/dart/client/overview.mdx

1.57.05.3 KB
Original Source

ag_ui.client

The Agent User Interaction Protocol Client SDK provides agent connectivity options for Dart applications. This package delivers flexible connection methods to AG-UI compatible agent implementations with full type safety and reactive programming support.

bash
dart pub add ag_ui

AgUiClient

AgUiClient is the main class for connecting to AG-UI compatible servers. It handles HTTP communication, SSE streaming, and binary protocol encoding/decoding.

Key Features

  • Server-Sent Events (SSE): Real-time event streaming with automatic reconnection
  • Binary Protocol: Efficient data encoding using the AG-UI binary format
  • Error Recovery: Built-in retry logic with exponential backoff
  • Cancellation Support: Clean stream cancellation and resource cleanup
  • Type Safety: Fully typed events and responses

Configuration

Configure the client with server details and optional parameters:

dart
final client = AgUiClient(
  config: AgUiClientConfig(
    baseUrl: 'http://localhost:8000',
    headers: {'Authorization': 'Bearer token'},
    timeout: Duration(seconds: 30),
    retryConfig: RetryConfig(
      maxRetries: 3,
      baseDelay: Duration(seconds: 1),
    ),
  ),
);

Core Methods

runAgent

Executes an agent with the provided input and streams events:

dart
Stream<BaseEvent> runAgent(
  String agentId,
  RunAgentInput input, {
  Map<String, String>? headers,
})

runAgentRaw

Executes an agent and returns raw SSE messages without decoding:

dart
Stream<SseMessage> runAgentRaw(
  String agentId,
  RunAgentInput input, {
  Map<String, String>? headers,
})

cancelAgent

Cancels an active agent execution:

dart
Future<void> cancelAgent(String agentId)

Usage Examples

Basic Agent Execution

dart
final input = SimpleRunAgentInput(
  messages: [
    UserMessage(id: 'msg_1', content: 'What is the weather today?'),
  ],
);

await for (final event in client.runAgent('weather-agent', input)) {
  print('Received: ${event.type}');
}

With Error Handling

dart
try {
  await for (final event in client.runAgent('agent', input)) {
    // Process events
  }
} on AgUiClientError catch (e) {
  print('Client error: ${e.message}');
} on NetworkError catch (e) {
  print('Network error: ${e.message}');
}

Cancellation

dart
// Start agent
final stream = client.runAgent('long-running-agent', input);

// Listen with cancellation option
final subscription = stream.listen((event) {
  // Process events
});

// Cancel when needed
await client.cancelAgent('long-running-agent');
await subscription.cancel();

<Card title="AgUiClient Reference" icon="plug" href="/sdk/dart/client/client" color="#3B82F6" iconType="solid"

Complete API reference for the AgUiClient class </Card>

AgUiClientConfig

Configuration object for client initialization:

Properties

  • baseUrl (String): Base URL of the AG-UI server
  • headers (Map<String, String>?): Default headers for all requests
  • timeout (Duration?): Request timeout duration
  • retryConfig (RetryConfig?): Retry configuration for failed requests
  • validateResponses (bool): Enable response validation (default: true)

RetryConfig

Controls retry behavior for failed requests:

dart
class RetryConfig {
  final int maxRetries;
  final Duration baseDelay;
  final Duration maxDelay;
  final double backoffMultiplier;

  const RetryConfig({
    this.maxRetries = 3,
    this.baseDelay = const Duration(seconds: 1),
    this.maxDelay = const Duration(seconds: 30),
    this.backoffMultiplier = 2.0,
  });
}

<Card title="Configuration Reference" icon="gear" href="/sdk/dart/client/config" color="#3B82F6" iconType="solid"

Detailed configuration options and examples </Card>

Error Handling

The client provides comprehensive error handling with specific exception types:

Exception Types

  • AgUiClientError: General client errors
  • NetworkError: Network connectivity issues
  • ValidationError: Input validation failures
  • ServerError: Server-side errors (5xx status codes)
  • TimeoutError: Request timeout errors

Error Recovery

The client automatically retries failed requests based on the retry configuration:

dart
final config = AgUiClientConfig(
  baseUrl: 'http://localhost:8000',
  retryConfig: RetryConfig(
    maxRetries: 5,
    baseDelay: Duration(milliseconds: 500),
    backoffMultiplier: 1.5,
  ),
);

SSE Client

The underlying SSE client handles Server-Sent Events with:

  • Automatic reconnection on connection loss
  • Exponential backoff for retry attempts
  • Event ID tracking for resumption
  • Keep-alive ping/pong support

<Card title="SSE Client Reference" icon="stream" href="/sdk/dart/client/sse" color="#3B82F6" iconType="solid"

Server-Sent Events implementation details </Card>

Best Practices

  1. Resource Management: Always dispose of clients when done:

    dart
    client.dispose();
    
  2. Error Handling: Implement comprehensive error handling:

    dart
    stream.handleError((error) {
      // Log and recover
    });
    
  3. Cancellation: Cancel long-running operations when appropriate:

    dart
    await client.cancelAgent(agentId);
    
  4. Headers: Use headers for authentication and tracking:

    dart
    client.runAgent('agent', input, headers: {
      'X-Request-ID': 'unique-id',
    });