gguf:tokenizer-fields
(gguf:tokenizer-fields file)
ファイルのトークナイザ関連フィールドを plist で返します。tokenizer:make-bpe と tokenizer:make-sentencepiece が受け取る形です。:model("gpt2" はマージリスト付きのバイトレベル BPE、"llama" はスコア付きの SentencePiece 形式)、:pre(事前トークナイザ名。tokenizer: はこの文字列をそのまま受け取ります)、:tokens、:scores、:merges、:token-type、:bos、:eos です。ファイルが持たないフィールドは nil になります(gpt2 の語彙は merges を持ち scores を持たず、llama はその逆です)。
解釈はトークナイザ側の仕事なので、ここでは値をそのまま出します。:metadata-only t の時点で全部揃っているため、チェックポイントからトークナイザを取り出すのに重みを読む必要はありません。
CL-USER> (let ((fields (gguf:tokenizer-fields *m*)))
(list (getf fields :model) (getf fields :pre)
(length (getf fields :tokens)) (length (getf fields :merges))))
("gpt2" "smollm" 49152 48900)
CL-USER> (let* ((fields (gguf:tokenizer-fields *m*))
(tk (tokenizer:make-bpe (getf fields :tokens) (getf fields :merges)
:kind (getf fields :pre))))
(tokenizer:encode tk "Once upon a time"))
(6403 1980 253 655)