{
 "model_type": "paradee",
 "version": "2.0-draft (v2f)",
 "sample_rate": 24000,
 "n_token": 178,
 "vocab": {
  ";": 1,
  ":": 2,
  ",": 3,
  ".": 4,
  "!": 5,
  "?": 6,
  "—": 9,
  "…": 10,
  "\"": 11,
  "(": 12,
  ")": 13,
  "“": 14,
  "”": 15,
  " ": 16,
  "̃": 17,
  "ʣ": 18,
  "ʥ": 19,
  "ʦ": 20,
  "ʨ": 21,
  "ᵝ": 22,
  "ꭧ": 23,
  "A": 24,
  "I": 25,
  "O": 31,
  "Q": 33,
  "S": 35,
  "T": 36,
  "W": 39,
  "Y": 41,
  "ᵊ": 42,
  "a": 43,
  "b": 44,
  "c": 45,
  "d": 46,
  "e": 47,
  "f": 48,
  "h": 50,
  "i": 51,
  "j": 52,
  "k": 53,
  "l": 54,
  "m": 55,
  "n": 56,
  "o": 57,
  "p": 58,
  "q": 59,
  "r": 60,
  "s": 61,
  "t": 62,
  "u": 63,
  "v": 64,
  "w": 65,
  "x": 66,
  "y": 67,
  "z": 68,
  "ɑ": 69,
  "ɐ": 70,
  "ɒ": 71,
  "æ": 72,
  "β": 75,
  "ɔ": 76,
  "ɕ": 77,
  "ç": 78,
  "ɖ": 80,
  "ð": 81,
  "ʤ": 82,
  "ə": 83,
  "ɚ": 85,
  "ɛ": 86,
  "ɜ": 87,
  "ɟ": 90,
  "ɡ": 92,
  "ɥ": 99,
  "ɨ": 101,
  "ɪ": 102,
  "ʝ": 103,
  "ɯ": 110,
  "ɰ": 111,
  "ŋ": 112,
  "ɳ": 113,
  "ɲ": 114,
  "ɴ": 115,
  "ø": 116,
  "ɸ": 118,
  "θ": 119,
  "œ": 120,
  "ɹ": 123,
  "ɾ": 125,
  "ɻ": 126,
  "ʁ": 128,
  "ɽ": 129,
  "ʂ": 130,
  "ʃ": 131,
  "ʈ": 132,
  "ʧ": 133,
  "ʊ": 135,
  "ʋ": 136,
  "ʌ": 138,
  "ɣ": 139,
  "ɤ": 140,
  "χ": 142,
  "ʎ": 143,
  "ʒ": 147,
  "ʔ": 148,
  "ˈ": 156,
  "ˌ": 157,
  "ː": 158,
  "ʰ": 162,
  "ʲ": 164,
  "↓": 169,
  "→": 171,
  "↗": 172,
  "↘": 173,
  "ᵻ": 177
 },
 "teacher": "hexgrad/Kokoro-82M",
 "teacher_voice": "af_heart",
 "onnx": "paradee_v2f.onnx",
 "architecture": {
  "text_side": "TextStudent2 cfg b (shared-weight transformer encoder, depthwise-conv duration branch, BiLSTM F0/N stack, asr MLP into the teacher's 512-d space)",
  "decoder": "AdaIN trunk width 128 (preset D) + source-filter head v4 (ConvNeXt width 160; 64-harmonic closed-form sine bank on the 300-point STFT grid, one shared inverse STFT, TF-domain plain noise drawn as rows of a 2^17 session-start table; no pulsed or burst paths)",
  "packing": "int4-g32 / int6 / int8 weights unpacked at session start; 24 GEMMs as dynamic int8 (7-bit weights); noise from a Gaussian table generated at session start"
 },
 "onnx_alternatives": {
  "paradee_v2f_noint8.onnx": "v2f weights, fp32 compute (no int8 GEMMs)",
  "paradee_v2e.onnx": "previous draft",
  "paradee_v2d.onnx": "earlier draft",
  "paradee_v2e_noint8.onnx": "v2e weights, fp32 compute (no int8 GEMMs)",
  "paradee_v2c.onnx": "earlier draft",
  "paradee_v2e_web.onnx": "v2e weights, row-drawn noise from a 2^17 table (onnxruntime-web: small session-start memory)",
  "paradee_v2e_web_noint8.onnx": "the web file with fp32 compute (WebGPU, untested)",
  "paradee_v2f_lite.onnx": "v2f decoder + the smaller r5_t1x text side (1.59M): ~15% faster in onnxruntime-web, 0.8 MB smaller, ~+0.1 pp WER",
  "paradee_v2f_lite_noint8.onnx": "v2f decoder + the smaller r5_t1x text side (1.59M): ~15% faster in onnxruntime-web, 0.8 MB smaller, ~+0.1 pp WER, fp32 compute",
  "paradee_v2g.onnx": "v2g: streamable LSTM-free text side (r5_t3sgx) + fixed-norm trunk decoder (r9sf), int8 compute",
  "paradee_v2g_noint8.onnx": "v2g, fp32 compute (WebGPU file)"
 }
}