llamaTokenize method

(Pointer<llama_token>, int) llamaTokenize({
  1. required Pointer<llama_model> model,
  2. required String text,
  3. required bool addBos,
  4. bool special = false,
})

Tokenize the given text.

Implementation

(Pointer<llama_token>, int) llamaTokenize({
  required Pointer<llama_model> model,
  required String text,
  required bool addBos,
  bool special = false,
}) {
  // upper limit for the number of tokens
  final maxTokens = text.length + (addBos ? 1 : 0) + 1;
  final tokens =
      malloc.allocate<llama_token>(maxTokens * sizeOf<llama_token>());

  final nTokens = llama_tokenize(
    model,
    text.toNativeUtf8().cast(),
    maxTokens,
    tokens,
    maxTokens,
    addBos,
    special,
  );

  final result =
      malloc.allocate<llama_token>(nTokens * sizeOf<llama_token>());

  if (nTokens < 0) {
    malloc.free(tokens);
    throw Exception('Tokenization failed');
  }

  for (var i = 0; i < nTokens; ++i) {
    result[i] = tokens[i];
  }

  malloc.free(tokens);

  return (result, nTokens);
}