chatCompletion method

  1. @override
Future<ChatCompletionResponse> chatCompletion({
  1. required List<ChatMessage> messages,
  2. required ChatCompletionRequest options,
})
override

Implementation

@override
Future<ChatCompletionResponse> chatCompletion({required List<ChatMessage> messages, required ChatCompletionRequest options}) async {
  final generationConfig = _generationConfig(options);

  final systemMessage = messages.where((message) => message.role == MessageRole.system).firstOrNull?.content;
  final ai = _firebaseAI.generativeModel(
    model: options.model,
    systemInstruction: systemMessage != null ? Content.system(systemMessage) : null,
    generationConfig: generationConfig
  );

  final conversationMessages = messages.where((message) => message.role != MessageRole.system)
      .map((message) => Content(message.role == MessageRole.assistant ? 'model' : 'user', [TextPart(message.content)]))
      .toList();

  try {
    final response = await ai.generateContent(conversationMessages);
    if (response.text != null) {
      return _parseResponse(options.model, response);
    } else {
      throw AIException(
        'Request failed',
        provider: providerName,
      );
    }
  } catch (e) {
    if (e is AIException) rethrow;
    throw AINetworkException(e.toString(), provider: providerName);
  }

}