chatStream method
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 (_) {}
}
}
}