chatCompletion method
Future<ChatCompletionResponse>
chatCompletion({
- required List<
ChatMessage> messages, - required ChatCompletionRequest options,
override
Implementation
@override
Future<ChatCompletionResponse> chatCompletion({required List<ChatMessage> messages, required ChatCompletionRequest options}) async {
final body = _body(messages: messages, options: options);
try {
final response = await _client.post(
Uri.parse('$_baseUrl/chat/completions'),
headers: _headers(),
body: jsonEncode(body),
).timeout(config.timeout);
if (response.statusCode == 200) {
final json = jsonDecode(response.body) as Map<String, dynamic>;
return _parseResponse(json);
} else if (response.statusCode == 401 || response.statusCode == 403) {
throw AIAuthenticationException(
'Authentication failed',
provider: providerName,
statusCode: response.statusCode,
);
} else if (response.statusCode == 429) {
throw AIRateLimitException(
'Rate limit exceeded',
provider: providerName,
statusCode: response.statusCode,
);
} else {
final error = jsonDecode(response.body) as Map<String, dynamic>?;
throw AIException(
error?['error']?['message'] ?? 'Request failed',
provider: providerName,
statusCode: response.statusCode,
);
}
} on TimeoutException {
throw AINetworkException('Request timed out', provider: providerName);
} catch (e) {
if (e is AIException) rethrow;
throw AINetworkException(e.toString(), provider: providerName);
}
}