getResponse method

  1. @override
Future<ChatResponse> getResponse({
  1. required Iterable<ChatMessage> messages,
  2. ChatOptions? options,
  3. CancellationToken? cancellationToken,
})

Sends a chat request and returns the complete response.

Implementation

@override
Future<ChatResponse> getResponse({
  required Iterable<ChatMessage> messages,
  ChatOptions? options,
  CancellationToken? cancellationToken,
}) async {
  final text = StringBuffer();
  final extras = <AIContent>[];
  UsageDetails? usage;
  ChatFinishReason? finishReason;
  await for (final update in getStreamingResponse(
    messages: messages,
    options: options,
    cancellationToken: cancellationToken,
  )) {
    if (update.usage != null) usage = update.usage;
    if (update.finishReason != null) finishReason = update.finishReason;
    for (final content in update.contents) {
      if (content is TextContent) {
        text.write(content.text);
      } else {
        extras.add(content);
      }
    }
  }
  return ChatResponse(
    messages: <ChatMessage>[
      ChatMessage(
        role: ChatRole.assistant,
        contents: <AIContent>[
          if (text.isNotEmpty) TextContent(text.toString()),
          ...extras,
        ],
      ),
    ],
    finishReason: finishReason,
    usage: usage,
  );
}