chat method
Future<String>
chat({
- required String apiKey,
- required String model,
- 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;
}