chat method

  1. @override
Future<String> chat({
  1. required String apiKey,
  2. required String model,
  3. required ChatRequest request,
})
override

Multi-turn. Returns the assistant's raw text for the final turn.

Implementation

@override
Future<String> chat({
  required String apiKey,
  required String model,
  required ChatRequest request,
}) async {
  final body = jsonEncode(_buildPayload(model, request, stream: false));
  final res = await retryRequest(
    send: () => _http
        .post(
          Uri.parse('$_baseUrl/messages'),
          headers: _headers(apiKey),
          body: body,
        )
        .timeout(_timeout),
    providerLabel: 'Anthropic',
  );
  final json = jsonDecode(res.body) as Map<String, Object?>;
  final content = json['content'] as List<Object?>?;
  if (content == null || content.isEmpty) {
    throw const AiBrokerException('Anthropic returned no content.');
  }
  final buf = StringBuffer();
  for (final block in content) {
    if (block is! Map<String, Object?>) continue;
    if (block['type'] != 'text') continue;
    buf.write(block['text'] as String? ?? '');
  }
  final out = buf.toString().trim();
  if (out.isEmpty) {
    throw const AiBrokerException('Anthropic returned empty text.');
  }
  return out;
}