chatWithAgentStream method
Implementation
Stream<Either<String, List<LlmChatMessage>>> chatWithAgentStream({
required String model,
required List<LlmChatMessage> messages,
String? sessionId,
int? maxTokens,
double? temperature,
}) async* {
try {
var body = {
"stream": true,
"sessionId": sessionId,
"model": model,
"messages": messages
.map((e) => {'role': e.type, 'content': e.message ?? ''})
.toList(),
};
if (maxTokens != null) {
body['maxTokens'] = maxTokens;
}
if (temperature != null) {
body['temperature'] = temperature;
}
final stream = StreamClient.postChatStream(
apiKey: apiKey,
fullPath: '$baseUrl/v1/chat/completions',
body: body,
onSuccess: (ChatStreamResponse response) {
return response;
},
onError: (error) {
debugPrint('streamAiChat onError callback: $error');
return error;
},
);
bool firstResponseReceived = false;
await for (var event in stream) {
if (event is ChatStreamResponse) {
final _messages = handleResponse(
response: event,
messages: messages,
onFirstResponseReceived: () {
firstResponseReceived = false;
},
firstResponseReceived: firstResponseReceived,
);
yield Right(_messages);
firstResponseReceived = true;
} else {
debugPrint('streamAiChat yielding left');
yield Left(event.toString());
}
}
} catch (e) {
debugPrint('chatWithAgent yielding left on exception $e');
yield Left(e.toString());
}
}