sendMessage method
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);
}
}