#include <stdio.h>#include <stdlib.h>#include <string.h>#include <stdint.h>#include <stdbool.h>#include <ctype.h>#include "tokenizer/tokenizer.h"#include "tokenizer/murmurhash3.h"#include "tokenizer/hash_table.h"Go to the source code of this file.
| int ck_tokenizer_add_merge | ( | CKTokenizer * | tok, |
| int32_t | left_id, | ||
| int32_t | right_id, | ||
| int32_t | merged_id, | ||
| int32_t | priority | ||
| ) |
Add a BPE merge rule.
| tok | Tokenizer |
| left_id | Left token ID |
| right_id | Right token ID |
| merged_id | Merged token ID |
| priority | Lower = higher priority (applied first) |
Definition at line 560 of file tokenizer.c.
| int ck_tokenizer_add_special_token | ( | CKTokenizer * | tok, |
| const char * | name, | ||
| int32_t | id | ||
| ) |
Add special token (UNK, BOS, EOS, PAD, MASK).
| tok | Tokenizer |
| name | Special token name ("unk", "bos", "eos", "pad", "mask") |
| id | Token ID |
Definition at line 218 of file tokenizer.c.
References CKTokenizer::bos_id, ck_tokenizer_add_token(), ck_tokenizer_hash_table_lookup(), ck_trie_insert(), CKTokenizer::eos_id, id, CKTokenizer::pad_id, CKTokenizer::unk_id, CKTokenizer::vocab, and CKTokenizer::vocab_trie.
Referenced by main().
| int ck_tokenizer_add_token | ( | CKTokenizer * | tok, |
| const char * | token, | ||
| int32_t | id, | ||
| float | score | ||
| ) |
Add a token to vocabulary.
| tok | Tokenizer |
| token | Token string |
| id | Token ID |
| score | Token score (for SPM) |
Definition at line 162 of file tokenizer.c.
References ck_tokenizer_hash_table_insert(), ck_tokenizer_hash_table_lookup(), ck_trie_insert(), id, CKTokenizer::id_to_token, score, token, CKTokenizer::vocab, CKTokenizer::vocab_capacity, CKTokenizer::vocab_size, and CKTokenizer::vocab_trie.
Referenced by ck_tokenizer_add_special_token().
| CKTokenizer * ck_tokenizer_create | ( | CKTokenizerType | type | ) |
Definition at line 39 of file tokenizer.c.
References CKTokenizerConfig::add_bos, CKTokenizerConfig::add_eos, CKTokenizerConfig::add_space_prefix, CKTokenizer::bos_id, CK_SPM_MODE_UNIGRAM, ck_tokenizer_hash_table_create(), ck_tokenizer_hash_table_free(), CK_TOKENIZER_HT_BUCKETS_LARGE, ck_tokenizer_mempool_init(), ck_trie_create(), CKTokenizer::config, CKTokenizer::eos_id, CKTokenizer::id_to_token, CKTokenizer::mask_id, CKTokenizer::pad_id, CKTokenizer::pool, CKTokenizer::scores, CKTokenizerConfig::spm_mode, CKTokenizerConfig::type, CKTokenizer::types, CKTokenizer::unk_id, CKTokenizerConfig::unk_score, CKTokenizer::vocab, CKTokenizer::vocab_capacity, and CKTokenizer::vocab_trie.
Referenced by ck_tokenizer_create_bpe(), ck_tokenizer_create_spm(), ck_tokenizer_create_wordpiece(), and main().
| int ck_tokenizer_decode | ( | const CKTokenizer * | tok, |
| const int32_t * | ids, | ||
| int | num_ids, | ||
| char * | text, | ||
| int | max_len | ||
| ) |
Decode token IDs to text.
| tok | Tokenizer |
| ids | Input token IDs |
| num_ids | Number of IDs |
| text | Output text buffer |
| max_len | Maximum text length |
Definition at line 494 of file tokenizer.c.
References CKTokenizer::bos_id, ck_tokenizer_id_to_token(), CKTokenizer::eos_id, ids, max_len, num_ids, CKTokenizer::pad_id, text, and token.
Referenced by main().
| CKSpacePrefixStyle ck_tokenizer_detect_space_prefix_style | ( | CKTokenizer * | tok | ) |
Definition at line 281 of file tokenizer.c.
References CK_SPACE_PREFIX_ASCII, CK_SPACE_PREFIX_AUTO, CK_SPACE_PREFIX_GPT2, CK_SPACE_PREFIX_SPM, CKTokenizer::config, CKTokenizer::id_to_token, CKTokenizerConfig::space_prefix_detected, CKTokenizerConfig::space_prefix_style, token, and CKTokenizer::vocab_size.
Referenced by ck_tokenizer_encode().
| int ck_tokenizer_encode | ( | const CKTokenizer * | tok, |
| const char * | text, | ||
| int | text_len, | ||
| int32_t * | ids, | ||
| int | max_ids | ||
| ) |
Encode text to token IDs using greedy longest-match.
For BPE: applies merge rules iteratively. For WordPiece/SPM: greedy longest-match from vocabulary.
| tok | Tokenizer |
| text | Input text |
| text_len | Text length, or -1 for null-terminated |
| ids | Output token IDs |
| max_ids | Maximum IDs to write |
Definition at line 436 of file tokenizer.c.
References CKTokenizer::add_bos, CKTokenizerConfig::add_bos, CKTokenizer::add_eos, CKTokenizerConfig::add_eos, CKTokenizer::bos_id, CK_TOKENIZER_BPE, ck_tokenizer_detect_space_prefix_style(), ck_tokenizer_encode_spm_dispatch(), ck_tokenizer_lookup(), ck_tokenizer_lookup_merge(), CK_TOKENIZER_SPM, CKTokenizer::config, config, CKTokenizer::eos_id, find_longest_match(), id, ids, max_ids, CKMergeRule::merged, CKTokenizer::merges, CKTokenizer::num_merges, out_len, preprocess_bpe_spaces(), CKMergeRule::priority, style, text, text_len, CKTokenizerConfig::type, CKTokenizer::unk_id, and utf8_len().
Referenced by main(), and run_inference().
| int ck_tokenizer_encode_spm_dispatch | ( | const CKTokenizer * | tok, |
| const char * | text, | ||
| int | text_len, | ||
| int32_t * | ids, | ||
| int | max_ids | ||
| ) |
Definition at line 792 of file tokenizer_spm.c.
References CKTokenizerConfig::add_bos, CKTokenizerConfig::add_eos, CKTokenizer::bos_id, ck_tokenizer_encode_spm_plain_segment(), CKTokenizer::config, CKTokenizer::eos_id, ids, max_ids, spm_find_special_token_at_pos(), text, and text_len.
Referenced by ck_tokenizer_encode().
| void ck_tokenizer_free | ( | CKTokenizer * | tok | ) |
Definition at line 96 of file tokenizer.c.
References CKTokenizer::byte_token_id, ck_pool_free(), ck_tokenizer_hash_table_free(), ck_tokenizer_mempool_free(), ck_trie_free(), CKTokenizer::id_to_token, CKTokenizer::merge_hash, CKTokenizer::merges, CKTokenizer::pool, CKTokenizer::scores, CKTokenizer::types, CKTokenizer::vocab, CKTokenizer::vocab_hash, CKTokenizer::vocab_size, and CKTokenizer::vocab_trie.
Referenced by main(), run_inference(), run_inference(), and run_inference().
| const char * ck_tokenizer_id_to_token | ( | const CKTokenizer * | tok, |
| int32_t | id | ||
| ) |
Definition at line 337 of file tokenizer.c.
References id, CKTokenizer::id_to_token, and CKTokenizer::vocab_size.
Referenced by ck_tokenizer_decode(), ck_tokenizer_encode_spm_impl(), main(), and run_inference().
| int ck_tokenizer_load_binary | ( | CKTokenizer * | tok, |
| int | vocab_size, | ||
| const int32_t * | offsets, | ||
| const char * | strings, | ||
| int | num_merges, | ||
| const int32_t * | merges | ||
| ) |
Load vocabulary from memory-mapped binary data.
| tok | Tokenizer |
| vocab_size | Number of tokens |
| offsets | Array of offsets into strings pool |
| strings | String pool containing null-terminated tokens |
| num_merges | Number of BPE merges |
| merges | Merge rules as (left, right, merged) triplets |
Definition at line 546 of file tokenizer.c.
References ck_tokenizer_load_binary_with_scores(), merges, num_merges, offsets, strings, and vocab_size.
| int ck_tokenizer_load_gguf | ( | CKTokenizer * | tok, |
| const char * | path | ||
| ) |
Load vocabulary from GGUF file.
| tok | Tokenizer |
| path | Path to GGUF file |
Definition at line 556 of file tokenizer.c.
| int ck_tokenizer_load_json | ( | CKTokenizer * | tok, |
| const char * | path | ||
| ) |
Load vocabulary from JSON file (HuggingFace format).
| tok | Tokenizer |
| path | Path to vocab.json or tokenizer.json |
Definition at line 557 of file tokenizer.c.
| int ck_tokenizer_load_merges | ( | CKTokenizer * | tok, |
| const char * | path | ||
| ) |
Load BPE merges from text file.
Format: token1 token2 (one merge per line)
| tok | Tokenizer |
| path | Path to merges.txt |
Definition at line 559 of file tokenizer.c.
| int ck_tokenizer_load_text | ( | CKTokenizer * | tok, |
| const char * | path | ||
| ) |
Load vocabulary from text file (one token per line).
Format: token_string [id] [score] Lines starting with # are comments.
| tok | Tokenizer |
| path | Path to vocabulary file |
Definition at line 558 of file tokenizer.c.
| int32_t ck_tokenizer_lookup | ( | const CKTokenizer * | tok, |
| const char * | token | ||
| ) |
Definition at line 330 of file tokenizer.c.
References ck_tokenizer_hash_table_lookup(), token, CKTokenizer::unk_id, and CKTokenizer::vocab.
| void ck_tokenizer_reset | ( | CKTokenizer * | tok | ) |
Definition at line 130 of file tokenizer.c.
References CKTokenizer::byte_token_id, ck_tokenizer_hash_table_clear(), ck_trie_clear(), CKTokenizer::id_to_token, CKTokenizer::scores, CKTokenizer::scores_size, CKTokenizer::types, CKTokenizer::types_size, CKTokenizer::vocab, CKTokenizer::vocab_size, and CKTokenizer::vocab_trie.
Referenced by ck_tokenizer_load_binary_with_scores().
| void ck_tokenizer_set_add_bos_eos | ( | CKTokenizer * | tok, |
| bool | add_bos, | ||
| bool | add_eos | ||
| ) |
Definition at line 248 of file tokenizer.c.
References CKTokenizerConfig::add_bos, add_bos, CKTokenizerConfig::add_eos, add_eos, and CKTokenizer::config.
| void ck_tokenizer_set_add_space_prefix | ( | CKTokenizer * | tok, |
| bool | add_space_prefix | ||
| ) |
Definition at line 254 of file tokenizer.c.
References CKTokenizerConfig::add_space_prefix, add_space_prefix, and CKTokenizer::config.
| void ck_tokenizer_set_space_prefix_style | ( | CKTokenizer * | tok, |
| CKSpacePrefixStyle | style | ||
| ) |
Definition at line 271 of file tokenizer.c.
References CK_SPACE_PREFIX_AUTO, CKTokenizer::config, CKTokenizerConfig::space_prefix_detected, CKTokenizerConfig::space_prefix_style, and style.
| void ck_tokenizer_set_special_ids | ( | CKTokenizer * | tok, |
| int32_t | unk, | ||
| int32_t | bos, | ||
| int32_t | eos, | ||
| int32_t | pad, | ||
| int32_t | mask | ||
| ) |
Definition at line 239 of file tokenizer.c.
References bos, CKTokenizer::bos_id, eos, CKTokenizer::eos_id, mask, CKTokenizer::mask_id, pad, CKTokenizer::pad_id, unk, and CKTokenizer::unk_id.
| void ck_tokenizer_set_spm_mode | ( | CKTokenizer * | tok, |
| CKSpmMode | spm_mode | ||
| ) |
Definition at line 259 of file tokenizer.c.
References CKTokenizer::config, CKTokenizerConfig::spm_mode, and spm_mode.
| void ck_tokenizer_set_use_trie | ( | CKTokenizer * | tok, |
| bool | use_trie | ||
| ) |
Definition at line 265 of file tokenizer.c.
References CKTokenizer::config, CKTokenizerConfig::use_trie, and use_trie.
|
static |
Definition at line 384 of file tokenizer.c.
References CKTokenizer::config, find_longest_match_hash(), find_longest_match_trie(), text, text_len, and CKTokenizerConfig::use_trie.
Referenced by ck_tokenizer_encode().
|
static |
Definition at line 354 of file tokenizer.c.
References ck_tokenizer_hash_table_lookup(), max_len, text, text_len, CKTokenizer::unk_id, and CKTokenizer::vocab.
Referenced by find_longest_match().
|
static |
Definition at line 343 of file tokenizer.c.
References ck_trie_find_longest(), text, text_len, CKTokenizer::unk_id, and CKTokenizer::vocab_trie.
Referenced by find_longest_match().
|
static |
Definition at line 396 of file tokenizer.c.
References CK_SPACE_PREFIX_ASCII, CK_SPACE_PREFIX_SPM, out_len, style, text, and text_len.
Referenced by ck_tokenizer_encode().