sendMessage method

  1. @override
Future<String> sendMessage({
  1. required String systemPrompt,
  2. required List<Map<String, String>> messages,
  3. int maxTokens = 8192,
})
override

Send messages and return the complete assistant response.

Implementation

@override
Future<String> sendMessage({
  required String systemPrompt,
  required List<Map<String, String>> messages,
  int maxTokens = 8192,
}) async {
  final token = await _auth.getAccessToken();
  final model = await _getModel();

  dev.log(
    'Gemini API request: model=$model, '
    'systemPrompt=${systemPrompt.length} chars, '
    'messages=${messages.length}, '
    'maxTokens=$maxTokens',
    name: 'GeminiDatasource',
  );

  final url = '${_provider.apiUrl}/models/$model:generateContent';

  try {
    final response = await _dio.post(
      url,
      options: Options(
        headers: {
          'Authorization': 'Bearer $token',
          'content-type': 'application/json',
        },
      ),
      data: {
        'systemInstruction': {
          'parts': [
            {'text': systemPrompt},
          ],
        },
        'contents': _buildContents(messages),
        'generationConfig': {'maxOutputTokens': maxTokens},
      },
    );

    final data = response.data as Map<String, dynamic>;
    return _extractText(data);
  } on DioException catch (e) {
    throw _mapDioError(e);
  }
}