createMessage method
Future<Message>
createMessage({
- required List<
Message> messages, - required String systemPrompt,
- List<
ToolDefinition> tools = const [], - int? maxTokens,
override
Send a non-streaming message completion with automatic retry.
Implementation
@override
Future<Message> createMessage({
required List<Message> messages,
required String systemPrompt,
List<ToolDefinition> tools = const [],
int? maxTokens,
}) async {
return withRetry(
config: retryConfig,
operation: (attempt) async {
final body = _buildRequestBody(
messages: messages,
systemPrompt: systemPrompt,
tools: tools,
maxTokens: maxTokens,
stream: false,
);
final url = Uri.parse('${config.baseUrl}/v1/messages');
SintSentinel.logger.d('AnthropicClient.createMessage: POST $url (attempt: $attempt)');
final response = await SintSentinel.guard(
() => http.post(url, headers: _headers, body: jsonEncode(body)),
tag: 'AnthropicClient.createMessage',
);
SintSentinel.logger.d('AnthropicClient.createMessage response: ${response.statusCode}');
if (response.statusCode != 200) {
SintSentinel.logger.e('AnthropicClient API error ${response.statusCode}: ${response.body}');
throw classifyApiError(
statusCode: response.statusCode,
body: response.body,
retryAfterHeader: response.headers['retry-after'],
);
}
return _parseMessageResponse(jsonDecode(response.body));
},
);
}