stream method

  1. @override
Stream<String> stream(
  1. List<ChatMessage> messages, {
  2. String? system,
  3. int? maxTokens,
})
override

Streams the response to messages as text deltas.

Implementation

@override
Stream<String> stream(
  List<ChatMessage> messages, {
  String? system,
  int? maxTokens,
}) async* {
  final key = _render(messages, system);
  final cached = await cache.lookup(key);
  if (cached != null) {
    yield cached;
    return;
  }
  final text = StringBuffer();
  var complete = false;
  try {
    await for (final delta in inner.stream(
      messages,
      system: system,
      maxTokens: maxTokens,
    )) {
      text.write(delta);
      yield delta;
    }
    complete = true;
  } finally {
    // Only a stream that ran to completion is worth replaying: a truncated
    // or failed one would be served to every similar prompt from now on.
    if (complete) await cache.put(key, text.toString());
  }
}