Text Generation
GGUF
English
verifiable-training
reproducibility
gpt2
conversational
Ryoari commited on
Commit
dbb5cf3
·
verified ·
1 Parent(s): 50d42fa

OpenVerifiableLLM 23M: safetensors, GGUF, tokenizer, recipe and model card

Browse files
.gitattributes CHANGED
@@ -33,3 +33,4 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ ovl-23m-chat.gguf filter=lfs diff=lfs merge=lfs -text
Modelfile ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Ollama build file for the released chat model. Build the GGUF first:
2
+ # python simple/export_gguf.py --run RUN --tokenizer PREP/tokenizer/tokenizer.json --out ovl-23m-chat.gguf
3
+ # ollama create openverifiablellm -f simple/Modelfile
4
+ # Run `ollama create` from the directory that holds ovl-23m-chat.gguf, or edit the FROM path.
5
+ FROM ./ovl-23m-chat.gguf
6
+
7
+ # The training format: <|user|> text <|eos|> <|assistant|> text <|eos|> ...
8
+ TEMPLATE """{{- range .Messages }}{{ if eq .Role "user" }}<|user|>{{ .Content }}<|eos|>{{ else if eq .Role "assistant" }}<|assistant|>{{ .Content }}<|eos|>{{ end }}{{ end }}<|assistant|>"""
9
+
10
+ PARAMETER stop "<|eos|>"
11
+ PARAMETER stop "<|user|>"
12
+ PARAMETER num_ctx 512
13
+ PARAMETER temperature 0.8
README.md ADDED
@@ -0,0 +1,93 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ license: gpl-3.0
3
+ language:
4
+ - en
5
+ pipeline_tag: text-generation
6
+ tags:
7
+ - verifiable-training
8
+ - reproducibility
9
+ - gpt2
10
+ - gguf
11
+ datasets:
12
+ - AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence
13
+ ---
14
+
15
+ # OpenVerifiableLLM 23M
16
+
17
+ A 23.1M-parameter GPT trained on exactly one pass over all of English Wikipedia (the 2026-09-01 dump),
18
+ then a short conversation phase. Its training can be recomputed bit for bit: all 37 training segments
19
+ were recomputed on a second RTX 5090 and matched. The model is small and often wrong about facts. The
20
+ point is that you can check how it was made.
21
+
22
+ - Code and docs: <https://github.com/AOSSIE-Org/OpenVerifiableLLM>
23
+ - Training data and the training record (chain, checkpoints, timestamped anchor):
24
+ [`AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence`](https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence)
25
+ - How it works: <https://github.com/AOSSIE-Org/OpenVerifiableLLM/blob/main/docs/how-it-works.md>
26
+
27
+ ## Files
28
+
29
+ | File | What it is | SHA-256 |
30
+ |---|---|---|
31
+ | `conversation.safetensors` | The chat model (chain entry 37) | `00c1c450acb2619f616af973d283fe5ef5cf1baaae5f16ff80bca97688f25168` |
32
+ | `base.safetensors` | The Wikipedia-only model, before the conversation phase (chain entry 31) | `5404ce5c7583e2e299d6e9fa44ed48e98bc5b5e11bc976905e8466a6fc5c36c2` |
33
+ | `ovl-23m-chat.gguf` | The chat model for llama.cpp and Ollama | `541d49c97b87cd4ed0acb90b4327535ee20b8c11c452e2583d460154e9d980de` |
34
+ | `Modelfile` | The Ollama build file, with the training chat format | `df4dacfc3191e56b1dc1195764ea66ca1a7695856be04ecec17d8dde4c66fc8b` |
35
+ | `recipe.json` | The training recipe: model size, schedule, seed | `28a2fb407a5582ae95c9e9b0bba2c14df946e87bba037800399c6059256b6e6d` |
36
+ | `tokenizer.json` | The byte-level BPE tokenizer (31,995 tokens after 5 control tokens) | `6eab0d9bcd5736cee484992b24e7a84459bee1cc3024c0e958a76842a57728c0` |
37
+
38
+ The safetensors files hold exactly the weights of the released `.pt` files, including both copies of
39
+ the tied embedding and output weights. The metadata key `ovl` records the `.pt` file's SHA-256 and the
40
+ model digest. `simple/export_safetensors.py` rebuilds these files byte for byte from the `.pt` files.
41
+
42
+ ## Use it
43
+
44
+ ```bash
45
+ ollama run ryoari/openverifiablellm "Tell me about the Moon."
46
+ ```
47
+
48
+ The chat format is `<|user|>` question `<|eos|>` `<|assistant|>` answer `<|eos|>`. llama.cpp's outputs
49
+ are close to PyTorch's but not bit-identical, so use the safetensors files to check the model.
50
+
51
+ | | |
52
+ |---|---|
53
+ | Architecture | GPT-2-style: 6 layers, 6 heads, 384 dimensions, 512-token context, tied embeddings |
54
+ | Training | 560,177 Wikipedia updates and 441 conversation updates, batch 32 × 512 tokens, seed 1234 |
55
+ | Data | 7,232,582 Wikipedia articles (7,118,121,139 training targets) and 3,481 OpenAssistant conversations |
56
+
57
+ ## Check it
58
+
59
+ On a laptop, check that a weights file is exactly the state in the timestamped training record. This
60
+ needs `ovl.py` from v1.1.0 or newer, Python 3.10 or newer, `git`, `openssl` and network access:
61
+
62
+ ```bash
63
+ pip install huggingface_hub torch numpy safetensors
64
+ hf download AOSSIE/OpenVerifiableLLM-23M conversation.safetensors --local-dir model
65
+ hf download AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence --repo-type dataset \
66
+ --include "release/simple-run/*" --exclude "*/ckpt-*" --exclude "*.pt" --local-dir ovl
67
+ git clone -q --depth 1 --branch v1.1.0 https://github.com/AOSSIE-Org/OpenVerifiableLLM ovl-code
68
+ OVL_DEVICE=cpu python ovl-code/simple/ovl.py verify --run ovl/release/simple-run --weights model/conversation.safetensors
69
+ # anchor ...: chain head MATCH (38 entries)
70
+ # anchor timestamp freetsa: OK (Oct 20 14:38:43 2026 GMT)
71
+ # anchor timestamp digicert: OK (Oct 20 14:38:43 2026 GMT)
72
+ # weights model/conversation.safetensors: MATCH chain entry 37
73
+ ```
74
+
75
+ This is a consistency check: it recomputes no training. To verify the training itself, recompute a
76
+ segment on an RTX 5090 (about an hour, about US$1.50):
77
+ <https://github.com/AOSSIE-Org/OpenVerifiableLLM/blob/main/docs/verify.md>.
78
+
79
+ ## Limits
80
+
81
+ - The model is small. It writes fluent, encyclopedia-style text, often gets facts wrong, and holds a
82
+ basic conversation. "Verified" is about how it was made, not about what it says.
83
+ - Bits match only on the training GPU type (RTX 5090). An RTX 4090, an H100 and a CPU give different
84
+ bits.
85
+ - So far every segment check was run by the project. No independent third party has checked one yet.
86
+ - The timestamps prove that the record existed by 2026-10-20 14:38:43 UTC, not when or how training
87
+ happened.
88
+
89
+ ## License
90
+
91
+ GPL-3.0, like the code. The training data keeps its own terms: English Wikipedia text (generally
92
+ CC BY-SA 4.0, with documented exceptions) and OpenAssistant `oasst1` (Apache 2.0). See the dataset's
93
+ `LICENSES.md`.
base.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:5404ce5c7583e2e299d6e9fa44ed48e98bc5b5e11bc976905e8466a6fc5c36c2
3
+ size 147980488
conversation.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:00c1c450acb2619f616af973d283fe5ef5cf1baaae5f16ff80bca97688f25168
3
+ size 147980496
ovl-23m-chat.gguf ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:541d49c97b87cd4ed0acb90b4327535ee20b8c11c452e2583d460154e9d980de
3
+ size 142815808
recipe.json ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "batch_size": 32,
3
+ "boundary_every": 18080,
4
+ "context": 512,
5
+ "conversation_epochs": 3,
6
+ "init": "normal-0.02-tied-v1",
7
+ "model": {
8
+ "attn_impl": "manual",
9
+ "dropout": 0,
10
+ "embed_dim": 384,
11
+ "max_seq_len": 512,
12
+ "num_heads": 6,
13
+ "num_layers": 6,
14
+ "vocab_size": 32000
15
+ },
16
+ "schedule": {
17
+ "conversation": "0.0001",
18
+ "floor": "0.00006",
19
+ "peak": "0.0006",
20
+ "warmup": 2000,
21
+ "wikipedia_updates": 560177
22
+ },
23
+ "seed": 1234,
24
+ "weight_decay": "0.01"
25
+ }
tokenizer.json ADDED
The diff for this file is too large to render. See raw diff