1mod format;
7pub mod index;
8mod inspect;
9mod preparation;
10pub(crate) mod qwen;
11
12pub use cherenkov_model_data::{
13 AffineOffset, BitPacking, ByteSource, DataSpan, Dtype, GgmlEncoding, MappedBytes,
14 MappedObjects, ObjectId, ObjectInfo, StoredTensor, Tensor, TensorEncoding, TensorId,
15 TensorRole, TensorType,
16};
17pub use format::*;
18pub use inspect::Checkpoint;
19pub(crate) use inspect::describe_raw;
20pub use preparation::*;
21use serde::{Deserialize, Serialize};
22
23#[derive(Debug, Clone, Serialize, Deserialize)]
25pub struct ModelDescription {
26 pub schema_version: u32,
28 pub format: CheckpointFormat,
30 pub architecture: Architecture,
32 pub metadata: serde_json::Value,
34 pub tensors: Vec<Tensor>,
36 pub ngram: Option<NgramTable>,
38}
39
40#[derive(Debug, Clone, Serialize, Deserialize)]
42#[serde(tag = "kind", rename_all = "snake_case")]
43pub enum Architecture {
44 Qwen4Exp,
45 Opaque { name: String },
46}
47
48#[derive(Debug, Clone, Serialize, Deserialize)]
50pub struct NgramTable {
51 pub hashing: NgramHash,
53 pub shards: Vec<TableShard>,
55}
56
57#[derive(Debug, Clone, Serialize, Deserialize)]
59#[serde(tag = "kind", rename_all = "snake_case")]
60pub enum NgramHash {
61 Qwen4Exp {
62 ngram_size: u64,
63 heads_per_ngram: u64,
64 head_offsets: Vec<u64>,
65 head_vocab_sizes: Vec<u64>,
66 layer_multipliers: Vec<i64>,
67 },
68 Opaque {
69 name: String,
70 },
71}
72
73#[derive(Debug, Clone, Serialize, Deserialize)]
75pub struct TableShard {
76 pub first_row: u64,
78 pub rows: u64,
80 pub tensor: TensorId,
82}
83
84#[cfg(test)]
85#[path = "../../tests/unit/model/mod.rs"]
86mod tests;