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 = 4096,
}) async {
final token = await _auth.getAccessToken();
final model = await _getModel();
dev.log(
'OpenAI API request: model=$model, '
'systemPrompt=${systemPrompt.length} chars, '
'messages=${messages.length}, '
'maxTokens=$maxTokens',
name: 'OpenAiDatasource',
);
final apiMessages = <Map<String, String>>[
{'role': 'system', 'content': systemPrompt},
...messages,
];
try {
final response = await _dio.post(
_provider.apiUrl,
options: Options(
headers: {
'Authorization': 'Bearer $token',
'content-type': 'application/json',
},
),
data: {
'model': model,
'max_completion_tokens': maxTokens,
'messages': apiMessages,
},
);
final data = response.data as Map<String, dynamic>;
final choices = data['choices'] as List<dynamic>;
if (choices.isEmpty) {
throw Exception('No choices in OpenAI API response.');
}
final message = choices[0]['message'] as Map<String, dynamic>;
return message['content'] as String;
} on DioException catch (e) {
throw _mapDioError(e);
}
}