chatStream method

Stream<String> chatStream(
  1. String model,
  2. String prompt, {
  3. String? system,
})

Streaming chat (native Ollama API). Yields text chunks.

Implementation

Stream<String> chatStream(String model, String prompt, {String? system}) async* {
  final messages = <Map<String, String>>[];
  if (system != null) messages.add({'role': 'system', 'content': system});
  messages.add({'role': 'user', 'content': prompt});

  final request = http.Request('POST', Uri.parse('$host/api/chat'));
  request.headers['Content-Type'] = 'application/json';
  request.body = jsonEncode({'model': model, 'messages': messages, 'stream': true});

  final response = await http.Client().send(request);

  await for (final chunk in response.stream.transform(utf8.decoder)) {
    for (final line in chunk.split('\n')) {
      if (line.trim().isEmpty) continue;
      try {
        final json = jsonDecode(line) as Map<String, dynamic>;
        final content = json['message']?['content'] as String?;
        if (content != null && content.isNotEmpty) yield content;
      } catch (_) {}
    }
  }
}