prompt method

Future<void> prompt(
  1. String message, {
  2. required void onChunk(
    1. Message message,
    2. String chunk
    ),
  3. void onFirstMessageCreated()?,
})

Implementation

Future<void> prompt(
  String message, {
  required void Function(Message message, String chunk) onChunk,
  void Function()? onFirstMessageCreated,
}) async {
  var threadId = conversation.id!;

  // Adding the message sent
  var selfMessage = Message(
    date: DateTime.now(),
    text: message,
    sender: SenderType.user,
  );
  conversation.messages.add(selfMessage);
  if (onFirstMessageCreated != null) onFirstMessageCreated();
  await threads.sendMessage(threadId, selfMessage);

  // Creating message object to update on every chunk.
  var msg = Message(
    date: DateTime.now(),
    text: '',
    sender: SenderType.assistant,
  );
  conversation.messages.add(msg);

  // Obtaining stream of characters of the response.
  var stream = completion.fetchStream(
    onError: onError,
    retries: retries,
    onJsonComplete: onJsonComplete,
  );
  await for (var chunk in stream) {
    msg.text += chunk;
    onChunk(msg, chunk);
  }

  // Saving message to the thread
  if (completion.addsResponseAutomatically) {
    return;
  }

  if (msg.text.isEmpty) {
    return;
  }

  await threads.sendMessage(threadId, msg);
}