streamChatCompletion method
Stream<ChatCompletionStreamResponse>
streamChatCompletion({
- required List<
ChatMessage> messages, - required ChatCompletionRequest options,
override
Implementation
@override
Stream<ChatCompletionStreamResponse> streamChatCompletion({required List<ChatMessage> messages, required ChatCompletionRequest options}) async* {
final body = _body(messages: messages, options: options)
..['stream'] = true;
try {
final request = http.Request('POST', Uri.parse('$_baseUrl/chat/completions'))
..headers.addAll(_headers())
..body = jsonEncode(body);
final streamedResponse = await _client.send(request).timeout(config.timeout);
if (streamedResponse.statusCode != 200) {
final errorBody = await streamedResponse.stream.bytesToString();
throw AIException(
'Stream request failed: $errorBody',
provider: providerName,
statusCode: streamedResponse.statusCode,
);
}
await for (final chunk in streamedResponse.stream.transform(utf8.decoder)) {
for (final line in chunk.split('\n')) {
if (line.trim().isEmpty) continue;
final streamResponse = ChatCompletionStreamResponse.parseSseLine(
line,
provider: providerName,
);
if (streamResponse.content.isNotEmpty) {
yield streamResponse;
}
if (streamResponse.isComplete) break;
}
}
} on TimeoutException {
throw AINetworkException(
'Stream request timed out',
provider: providerName,
);
} catch (e) {
if (e is AIException) rethrow;
throw AINetworkException(e.toString(), provider: providerName);
}
}