createMessage method
Future<Message>
createMessage({
- required List<
Message> messages, - required String systemPrompt,
- List<
ToolDefinition> tools = const [], - int? maxTokens,
override
Send a non-streaming chat completion and return the response as a Message.
Implementation
@override
Future<Message> createMessage({
required List<Message> messages,
required String systemPrompt,
List<ToolDefinition> tools = const [],
int? maxTokens,
}) async {
final openAiMessages = _expandMessages(messages, systemPrompt);
final body = <String, dynamic>{
'model': config.model,
'messages': openAiMessages,
'max_tokens': maxTokens ?? config.maxTokens,
};
if (tools.isNotEmpty) {
body['tools'] = tools.map((t) => t.toOpenAiMap()).toList();
}
final url = Uri.parse('${config.baseUrl}/chat/completions');
SintSentinel.logger.d('OpenAiShim.createMessage: POST $url');
final response = await SintSentinel.guard(
() => http.post(url, headers: _headers, body: jsonEncode(body)),
tag: 'OpenAiShim.createMessage',
);
SintSentinel.logger.d('OpenAiShim.createMessage response: ${response.statusCode}');
if (response.statusCode != 200) {
SintSentinel.logger.e('OpenAiShim API error ${response.statusCode}: ${response.body}');
throw Exception(
'OpenAI API error ${response.statusCode}: ${response.body}',
);
}
return _parseOpenAiResponse(jsonDecode(response.body));
}