| { |
| "architecture": "PLE", |
| "format": { |
| "magic_ascii": "PLE\\0", |
| "magic_le_hex": "0x00454c50", |
| "version": 1, |
| "header_bytes": 56, |
| "flags": { |
| "TIED_HEAD": false |
| } |
| }, |
| "config": { |
| "input_vocab": 8057, |
| "output_vocab": 854, |
| "d_model": 128, |
| "n_layers": 6, |
| "n_heads": 4, |
| "ffn_hidden": 384, |
| "ple_dim": 128, |
| "seq_len": 128, |
| "rope_theta": 10000.0 |
| }, |
| "vocabulary": { |
| "note": "asymmetric: the model reads a BPE vocabulary and writes a separate, smaller output alphabet of 854 classes, which includes punctuation and specials, so the output head is its own tensor rather than a view of the embedding", |
| "bpe_entries": 7338, |
| "word_rows_appended": 719, |
| "input_vocab_total": 8057, |
| "output_classes": 854, |
| "output_classes_reusing_a_bpe_id": 135, |
| "input_encoding": "ASCII only; non-ASCII input is refused rather than encoded differently from the reference tokenizer" |
| }, |
| "parameters": { |
| "ple_table": 6187776, |
| "tok_emb": 1031296, |
| "output_head": 109312, |
| "core": 1575424, |
| "total": 8903808 |
| }, |
| "quantization": { |
| "weights": "int4", |
| "group_size": 128 |
| }, |
| "runtime": { |
| "weights_staged_int8": "per-position core and the untied output head, in PSRAM", |
| "activations": "int8, quantized per staged matvec", |
| "sram": "float scratch buffers and RMSNorm vectors", |
| "psram": "staged core, staged head, KV cache", |
| "flash": "PLE table and token embedding, memory-mapped" |
| }, |
| "measured": { |
| "unit": "an output piece is one emitted class; punctuation is a class. Over the benchmark prompt set, 253 pieces render as 213 readable words.", |
| "serial_only": { |
| "ms_per_piece": 60.25, |
| "pieces_per_second": 16.6, |
| "readable_words_per_second": 13.97 |
| }, |
| "with_oled": { |
| "ms_per_piece": 88.83, |
| "pieces_per_second": 11.26, |
| "readable_words_per_second": 9.48, |
| "added_ms_per_piece": 28.58 |
| }, |
| "ms_per_forward": 49.6, |
| "method": "scripts/benchmark_device.py, eight fixed prompts, two passes per mode, spread under 0.1%, same weights and build switches apart from the display, generated text identical in both modes", |
| "common": { |
| "staged_tensors": 44, |
| "scratch_sram_bytes": 20940, |
| "norm_vectors_in_sram": 20, |
| "sram_fallbacks": 0, |
| "build": "-O3", |
| "date": "2026-08-02" |
| } |
| }, |
| "device_fingerprint_fnv1a": "e602146b", |
| "files": { |
| "model.bin": { |
| "sha256": "1359a1cb74de4143d630c2c192990de814cd47255bcdfa9cc135f07ef0a39fc4", |
| "bytes": 4600186, |
| "license": "MIT" |
| }, |
| "tokenizer.json": { |
| "sha256": "0ad085811c949f35c5f5f15b555f2ff2d46ec1ec94a1650552416d06aaa19ee2", |
| "bytes": 491735, |
| "license": "MIT" |
| }, |
| "vocab.json": { |
| "sha256": "5a16d6224abf03265d69ebcccf121c8f8d2c222bfedd8274acbc0bbbe13e4eb7", |
| "bytes": 50494, |
| "license": "MIT" |
| }, |
| "layout.json": { |
| "sha256": "15036c5ee2b23b9b35404ef6422cb788bbede8cf2c269bae35d4dbf9a48a0b90", |
| "bytes": 5142, |
| "license": "MIT" |
| } |
| }, |
| "weights_license": "MIT", |
| "tokenizer_license": "MIT", |
| "source_checkpoint": { |
| "name": "v5-L6-s0.pt", |
| "distributed": false, |
| "sha256": "bad2cfb6627dbde6893b11cd7e773ec96f1d8c36bf6d3a5d36845f9edc5f0ffb" |
| }, |
| "training_data": { |
| "dataset": "private question and answer corpus written for this project", |
| "redistributed": false, |
| "note": "the corpus, the checkpoints and the evaluation sets are not distributed. The weights and the inference assets in this repository are, which is why the vocabulary files are here: without them the output classes cannot be turned back into words or fed forward." |
| }, |
| "hardware": { |
| "board": "ESP32-S3", |
| "flash_mb": 16, |
| "psram_mb": 8, |
| "sram_kb": 512, |
| "model_partition_offset": "0x110000" |
| } |
| } |
|
|