sendMessage method

Future<Message> sendMessage(
  1. Message message, {
  2. List<Context> context = const [],
})

Implementation

Future<Message> sendMessage(Message message, {List<Context> context = const []}) async {
  AiClientResponse response = await client.query(
    system: description,
    history: _history,
    message: message,
    contexts: context,
    tools: tools,
    delay: client.delay,
  );

  addIntoHistory(
    message.type == MessageType.toolResult
        ? message
        : Message(
            type: message.type,
            content: buildPrompt(prompt: message.content, contexts: context),
          ),
  );

  final Message responseMessage;

  if (response is ToolResponse) {
    addIntoHistory(Message.toolCall(response.rawMessage!));

    final toolCalls = (jsonDecode(response.rawMessage!) as List);

    final toolCallMessages = await client.makeToolCalls(tools: tools, toolCalls: toolCalls);
    final lastMessage = toolCallMessages.removeLast();
    _history.addAll(toolCallMessages);

    responseMessage = await sendMessage(lastMessage);
  } else {
    responseMessage = Message.assistant(response.message!);
    addIntoHistory(responseMessage);
  }

  return responseMessage;
}