aiSseDataEvents function
Parses Server-Sent Events and yields each data: payload.
Implementation
Stream<String> aiSseDataEvents(Stream<String> chunks) async* {
var buffer = '';
await for (final chunk in chunks) {
buffer += chunk.replaceAll('\r\n', '\n');
while (true) {
final boundary = buffer.indexOf('\n\n');
if (boundary == -1) break;
final rawEvent = buffer.substring(0, boundary);
buffer = buffer.substring(boundary + 2);
final data = _sseDataFromRawEvent(rawEvent);
if (data != null) yield data;
}
}
final tail = buffer.trim();
if (tail.isNotEmpty) {
final data = _sseDataFromRawEvent(tail);
if (data != null) yield data;
}
}