sendMessageStream method
Stream<String>
sendMessageStream({
- required String message,
- List<
ChatMessage> conversationHistory = const [], - Map<
String, dynamic> ? options,
override
Send a message and get a streaming response
Implementation
@override
Stream<String> sendMessageStream({
required String message,
List<ChatMessage> conversationHistory = const [],
Map<String, dynamic>? options,
}) async* {
final messages = _prepareMessages(message, conversationHistory);
final request = http.Request('POST', Uri.parse(baseUrl));
request.headers.addAll({
'Content-Type': 'application/json',
'Authorization': 'Bearer $apiKey',
});
request.body = jsonEncode({
'model': model,
'messages': messages,
'temperature': options?['temperature'] ?? temperature,
'max_tokens': options?['maxTokens'] ?? maxTokens,
'stream': true,
});
final response = await request.send();
final stream = response.stream.transform(utf8.decoder);
String fullResponse = '';
await for (var chunk in stream) {
final lines = chunk.split('\n');
for (var line in lines) {
if (line.startsWith('data: ') && line != 'data: [DONE]') {
try {
final data = jsonDecode(line.substring(6));
final content = data['choices'][0]['delta']['content'];
if (content != null) {
fullResponse += content;
yield content;
}
} catch (e) {
// Skip invalid JSON
}
}
}
}
_conversationHistory.add({'role': 'user', 'content': message});
_conversationHistory.add({'role': 'assistant', 'content': fullResponse});
}