process method

Future<String> process(
  1. Stream<AIStreamChunk> stream, {
  2. OnChunkCallback? onChunk,
  3. OnCompleteCallback? onComplete,
  4. OnStreamErrorCallback? onError,
})

Processes a stream of chunks and returns the accumulated text.

Provides callbacks for real-time updates.

Implementation

Future<String> process(
  Stream<AIStreamChunk> stream, {
  OnChunkCallback? onChunk,
  OnCompleteCallback? onComplete,
  OnStreamErrorCallback? onError,
}) async {
  final buffer = StringBuffer();
  AIUsage? finalUsage;

  try {
    final effectiveStream =
        timeout != null ? stream.timeout(timeout!) : stream;

    await for (final chunk in effectiveStream) {
      buffer.write(chunk.text);
      onChunk?.call(chunk);

      if (chunk.isComplete) {
        finalUsage = chunk.usage;
      }
    }
  } catch (e) {
    onError?.call(e);
    if (buffer.isEmpty) rethrow;
    // If we have partial content, return it
  }

  final fullText = buffer.toString();
  onComplete?.call(fullText, finalUsage);
  return fullText;
}