1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
//! The vocabulary a GGUF file carries, as plain data.
//!
//! splintr never opens a GGUF container: parsing the header, the metadata
//! key-value block and the tensor table is the model runtime's job, and pulling
//! a GGUF parser into a tokenizer crate would make every consumer pay for it.
//! What splintr owns is the part that is pure tokenizer knowledge — which
//! algorithm `tokenizer.ggml.model` names, and how the surrounding flags have to
//! be honoured to reproduce llama.cpp's ids.
//!
//! So the caller reads the metadata block it has already parsed into this
//! struct, one field per `tokenizer.ggml.*` key, and hands it to
//! [`from_gguf_vocab`](super::from_gguf_vocab). Every field except `tokens`
//! is optional exactly as the GGUF key is, and `None` means "the file does not
//! say" — never "false" or "zero", because the defaults differ per dialect and
//! the loader is the one that knows them.
/// The `tokenizer.ggml.*` metadata of a GGUF file.
///
/// Field names mirror the GGUF keys with the `tokenizer.ggml.` prefix dropped.