send method
Throws if the request cannot be sent. Returns once headers are available.
Must stop work and close ChatResponse.body when abort completes.
Implementation
@override
Future<ChatResponse> send(
ChatRequest request, {
required Future<void> abort,
}) async {
final extra = await headers?.call();
final httpRequest = http.AbortableRequest(
'POST',
endpoint,
abortTrigger: abort,
)
..headers.addAll({
'accept': 'text/event-stream',
'content-type': 'application/json',
'x-vercel-ai-ui-message-stream': 'v1',
...?extra,
...?request.extraHeaders,
})
..bodyBytes = utf8.encode(jsonEncode((body ?? _defaultBody)(request)));
final response = await (_client ??= http.Client()).send(httpRequest);
return ChatResponse(
statusCode: response.statusCode,
headers: {
for (final e in response.headers.entries) e.key.toLowerCase(): e.value,
},
body: response.stream,
);
}