send method

  1. @override
Future<ChatResponse> send(
  1. ChatRequest request, {
  2. required Future<void> abort,
})
override

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,
  );
}