ai_ui_stream 1.0.1
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.
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();
}