reduce method

  1. @override
Future<List<ChatMessage>> reduce(
  1. List<ChatMessage> messages, {
  2. CancellationToken? cancellationToken,
})
override

Reduces the given messages.

Implementation

@override
Future<List<ChatMessage>> reduce(
  List<ChatMessage> messages, {
  CancellationToken? cancellationToken,
}) async {
  if (messages.length <= maxMessageCount) return messages;

  // Determine how many messages to keep and how many to summarize.
  final keepCount = maxMessageCount ~/ 2;
  final toSummarize = messages.sublist(0, messages.length - keepCount);
  final toKeep = messages.sublist(messages.length - keepCount);

  // Build a summarization request.
  final summarizeMessages = [
    ...toSummarize,
    ChatMessage.fromText(ChatRole.user, summarizationPrompt),
  ];

  final response = await chatClient.getChatResponse(
    messages: summarizeMessages,
    options: ChatOptions(),
    cancellationToken: cancellationToken,
  );

  final summary = response.text;

  return [
    ChatMessage.fromText(
      ChatRole.system,
      'Summary of earlier conversation: $summary',
    ),
    ...toKeep,
  ];
}