Skip to main content

ai_ui_stream 1.0.1 copy "ai_ui_stream: ^1.0.1" to clipboard
ai_ui_stream: ^1.0.1 copied to clipboard

Transport-agnostic Dart client for the AI SDK UI Message Stream protocol: SSE parser, message reducer and chat controller with tool approval.

example/main.dart

import 'dart:io';

import 'package:ai_ui_stream/ai_ui_stream.dart';
import 'package:ai_ui_stream/http.dart';

/// Usage: `dart run example/main.dart <chat-endpoint-url> <message>`
Future<void> main(List<String> args) async {
  if (args.length < 2) {
    stderr.writeln('Usage: dart run example/main.dart <url> <message>');
    exit(64);
  }

  final chat = ChatController(
    transport: HttpChatTransport(endpoint: Uri.parse(args[0])),
  );

  chat.snapshots.listen((snapshot) {
    final last = snapshot.messages.lastOrNull;
    if (last == null || last.role != MessageRole.assistant) return;
    final text = last.parts.whereType<TextUIPart>().map((p) => p.text).join();
    stdout.write('\r\x1B[2K${text.replaceAll('\n', ' ')}');
  });

  try {
    await chat.sendText(args[1]);
  } catch (error) {
    stderr.writeln('\nTurn failed: $error');
    exitCode = 1;
  }
  stdout.writeln();

  for (final approval in chat.pendingApprovals) {
    stdout.writeln(
      'Approval needed for ${approval.toolName}(${approval.input})'
      '${approval.reason == null ? '' : ': ${approval.reason}'}',
    );
  }
  await chat.dispose();
}
1
likes
160
points
--
downloads

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

Transport-agnostic Dart client for the AI SDK UI Message Stream protocol: SSE parser, message reducer and chat controller with tool approval.

Repository (GitHub)
View/report issues

Topics

#ai #sse #streaming #chat #vercel-ai-sdk

License

Apache-2.0 (license)

Dependencies

http

More

Packages that depend on ai_ui_stream