File size: 20,116 Bytes
e8f347a
 
9d70600
 
 
 
 
 
 
 
 
 
 
 
e8f347a
9d70600
 
 
 
 
 
 
 
 
 
 
 
 
 
e157e7a
9d70600
 
 
 
 
e157e7a
 
9d70600
 
 
 
 
e157e7a
9d70600
 
 
 
 
 
 
e157e7a
9d70600
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e157e7a
9d70600
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e157e7a
9d70600
e157e7a
9d70600
e157e7a
9d70600
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
46ecde1
9d70600
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e157e7a
 
9d70600
 
 
e157e7a
9d70600
 
 
e157e7a
 
9d70600
 
 
e157e7a
 
9d70600
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e157e7a
 
 
 
 
 
9d70600
e157e7a
9d70600
e157e7a
46ecde1
9d70600
 
e157e7a
9d70600
e157e7a
 
 
9d70600
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
---
license: agpl-3.0
language:
- en
library_name: dam1
pipeline_tag: question-answering
tags:
- dam-word
- llm
- symbolic
- reading-comprehension
- safetensors
- rust
- webassembly
---

# 🧠 DAM1

DAM1 is an LLM of a different design. You tell it things and ask it questions in English, as you
do with any LLM. It reads English one word at a time into a tree of things, places and the
relations between them, the world the words describe, and answers from that tree. Like any LLM
it reads a context of tokens and predicts the next token, one at a time. Its tokens are steps,
not pieces of text: grab a thing, drop it into a place, write a property, find what a question
names, get the answer, work a number, until it chooses to continue to the next word. The steps
are fixed operations of the engine; the network only chooses between them.

What it knows is in the tree, where it can be read and changed, and not in the weights. The
network learns only how to shape and read that memory. That is why it is small: it is not a
transformer, it was not trained on a large corpus, and it does not write free text. These files
hold 1,870,616 numbers, one network, and the
permanent state the project's seeds make. It runs on a processor, and in a browser through
WebAssembly, where the Datamine Network chat runs it with nothing sent to a server.

## 📊 How it compares

Every model was asked the questions of the held-out lines of DAM1's curriculum, which no network
was trained on: 2,673 for DAM1, and the 2,669 that existed when the others were run. Each item is a short text and one question about it.
One rule scores every reply. The other models are also given an order and two worked examples,
which DAM1 is not; they run in float16 on an NVIDIA RTX 3080 Ti, DAM1 on the processor.

| Model | Parameters | Weights | Memory | Answered | Exact | One answer |
|---|---:|---:|---:|---:|---:|---:|
| **DAM1** | **1,870,616** | **8 MB** | **23 MB** | **99.9%** | **99.9%** | **2 ms** |
| Qwen2.5-0.5B-Instruct | 494,032,768 | 988 MB | 1.01 GB | 63.8% | 39.6% | 109 ms |
| Qwen3-0.6B | 596,049,920 | 1.50 GB | 1.22 GB | 52.7% | 41.4% | 80 ms |
| LFM2-350M | 354,483,968 | 709 MB | 727 MB | 52.2% | 44.1% | 53 ms |
| SmolLM2-360M-Instruct | 361,821,120 | 724 MB | 760 MB | 51.4% | 34.1% | 114 ms |
| SmolLM2-135M-Instruct | 134,515,008 | 269 MB | 285 MB | 36.0% | 14.5% | 228 ms |

**Weights** is the file the hub publishes. DAM1's page downloads the same network written
small, 3.3 MB. **Memory** is what answering one question takes: for DAM1 the one block of
WebAssembly memory that holds the network, the state, the tree and the stack; for the others the
most the card held over the same questions. **Answered** is the share of replies that say the
answer. **Exact** is the share that begin with the answer and put nothing before it. **One answer**
is the middle wait for a single question, for DAM1 on the processor and for the others on the card.

The item set is DAM1's own curriculum. The words, the names and the numbers of a held-out line are
new, but its sentence shapes are shapes DAM1 was taught, so this measures reading of a taught shape
and not general knowledge. Ask about the capital of Peru and these models answer while DAM1 does
not. The harness is in
[benchmarks/](https://github.com/Datamine-Crypto/DAM1/blob/main/benchmarks/README.md).

## 📋 Model details

- **Made by:** Datamine Network Inc.
- **Model type:** an LLM built as a reader of one word at a time over a tree, driven by networks
  over a stack: an embedding per feature place, a block of weights per stack slot, one hidden
  layer of rectified units, an output per step class and a pointer over the words of the
  sentence. One network, trained from nothing; there is no base model.
- **Language:** English.
- **Licence:** AGPL-3.0-or-later.
- **Files built at:** the commit `config.json` records under `build`, which the publish writes as it exports.
- **Layout:** version 5, described in
  [FORMAT.md](https://github.com/Datamine-Crypto/DAM1/blob/main/huggingface/FORMAT.md).
- **Source:** https://github.com/Datamine-Crypto/DAM1

## ✨ What it does

Tell it statements and ask it questions, across the turns of a conversation. It also knows what
its seeds state: the number words, the measures, the clock, verb forms, opposites, what common
things are and the like. These replies were said by these files with `dam1 talk`, each group one
conversation. A statement is answered with nothing; the reply comes at the question.

| You say | DAM1 says |
|---|---|
| tom has a red car. | |
| who has the car? | tom |
| what color is tom's car? | red |
| what is 12 * 3? | 36 |
| what is the opposite of hot? | cold |
| how many legs does a dog have? | 4 |
| the cat is in the box. the box is in the garden. | |
| where is the cat? | box |
| is the cat in the garden? | yes |
| john took the ball. john went to the hall. | |
| what is john carrying? | ball |
| where is the ball? | hall |
| ann has 3 apples. ben has 5 apples. | |
| how many apples do they have together? | 8 |
| who has more apples? | ben |
| sam is taller than ann. ann is taller than bob. | |
| who is the tallest? | sam |
| is bob taller than sam? | no |
| my sister lives in paris and she loves music. | |
| where does my sister live? | paris |
| what does she love? | music |

It gets things wrong too, and a wrong reply looks the same as a right one:

| You say | DAM1 says | Should be |
|---|---|---|
| there is a red box and a blue box. the red box is heavy. which box is heavy? | yes | the red box |
| tom turned on the lamp. is the lamp on? | no | yes |
| it rained all night. what happened last night? | (no reply) | it rained |

## 🎯 Uses

Intended uses:

- Research on reading into a tree with learned steps, as an alternative to a transformer.
- Short conversations in simple English about things the user tells it: who has what, where
  things are, qualities, counts, sums, measures and time.
- Running an LLM with no server and no graphics card: native or in a browser.

Out of scope:

- Any decision where a wrong answer causes harm: medical, legal, financial, safety or personal.
- A source of truth. It does not know when it is wrong.
- Free text generation, translation, summaries, or English outside the shapes its lessons taught.
- Languages other than English.

## ⚙️ How it works

1. Text is split into sentences, and a sentence into words, numbers and marks. There is no
   learned tokenizer.
2. Memory is one tree, and the tree is a space: a thing is a node that stands inside its place or
   its owner, a relation is a braced token such as `{is}` or `{has}`, a count or a time is a tag
   on the thing, and a mention of a thing told before is a link to the same node.
3. Each word is one input. A word that names a thing makes the thing appear, the known one of
   its name or a new one carrying the flags the words before it set, such as `the` or a count.
4. The stack holds one sentence: the cursor, each word heard, and two events for every step taken
   (the step, and what it found or made). It is emptied at the next sentence. Each event is a set
   of features hashed into a space of 2^64 places.
5. A network reads the stack, one event per slot of 200. An event's embedding is the sum of the
   16-wide embeddings of its places. Each slot has its own weights into 512 hidden rectified
   units. The outputs take a softmax over the 104 step classes. A class is a move and its
   properties, such as `{grab}`, `{drop @}`, `{children add: @ type: property}` or `{get owner}`.
6. The step with the largest share is taken. When the step takes a word of the sentence (the `@`), the pointers score
   every word on the stack the same way and the best one is taken.
7. The step runs, its two events join the stack, and the network chooses again. `{continue}`
   goes on to the next word. A word may take at most 50 steps.
8. What a sentence wrote to the tree stays for the next sentence and the next turn, so a question
   is answered from everything the conversation said and from the seeds.

No rule decides an answer at reading time. Every step of every reading is the networks' choice.

## 🏋️ Training

### 📚 Data

All training data is in the source repository, written for this project in plain English. None of
it is a Hugging Face dataset, so the card lists no `datasets`.

- `model/data/train`: 274 lesson files in 16 folders, from basics and Grade 1 to Grade 12 and
  university, with the world lessons and the debug cases agreed while the design was made. Each
  line is text with the shape its tree should take and the answers expected. A line is either
  learned or held out of training: 2,575 learned lines and 942 held-out lines. The 12 debug
  cases are graded and never trained on.
- `model/data/facts` and `model/data/seeds`: plain fact sentences and the 60 seeds files built
  from them, told into the tree before anything is read. They are not used to train the network.
  They make the state every lesson and every chat starts from, which ships as `state.bin`.

#### What the lessons teach

One concept a file, from the basics up to a university exam:

- **Basics:** simple statements and questions, places, changes over time, referring back, yes and no, adjectives, searching the tree, which one, partial views and partial searches, checking again, tricks, conclusions, actions, hidden things, conversation.
- **Grade 1:** scenes with several things and owners, counts, forms of having, not having, decomposition.
- **Grade 2:** places, time and owning, possessives, classes, days, greetings, indirect questions, negatives, have questions, our and their, family, animals and their sounds, shapes and sides, weather and seasons, a and an, plural counts, my things, them, whose, letters and vowels, changing hands, two things alike, about me, stronger and weaker qualities, going to, story openers, colored things, things that happen, another one, labels and traits, always and never, how much.
- **Grade 3:** arithmetic in words, the number after, between, counting between, successors, odd and even, tens and hundreds, place value, greater and less, more and fewer, the biggest number, totals, counts over two owners, the next season, day, month and letter, alphabetical order, ordinal days, order and time words, order in a line, carrying a sum on, numbered ones, part of a group, on and off, my pocket.
- **Grade 4:** tell me about, comparisons and their inverses, qualities and opposites, verbs and their objects, seeing, giving, moving and carrying, picking up and dropping, what was carried before, counting what is carried, before and after, they, earlier and later, longer and heavier, hotter and colder, the passive, relation words, that clauses, can do, lost things, done by, because, telling, kin somewhere.
- **Grade 5:** costs, coins, dollars and cents, costs together, change, money left after buying, how many one can buy, unit prices, the clock, hours between, days and months apart, durations, parts of an hour, mixed time units, today from its neighbours, dozens and pairs, half and double, ages, amounts left, years and birthdays.
- **Grade 6:** each, sharing, full groups and what is left over, remainders, multiples and factors, what fits in, units, metric units and mixed units, units back, scaling amounts, two-step problems, the missing number, sequences, digit sums, counting words.
- **Grade 7:** fractions and comparing them, percent, discounts, percent increase, area and perimeter, the perimeter of a triangle, roman numerals, rounding, squares and cubes, square roots.
- **Grade 8:** averages, median, mode, range, speed and distance, travel time, unknowns, functions, definitions.
- **Grade 9:** capitals and materials, titles and languages, kind words, what kinds do, kinds with a quality, inherited kinds, superlative kinds, where countries are, what animals eat.
- **Grade 10:** directions, positions, paths, the far end, kinship, grandparents.
- **Grade 11:** deduction, induction, motives, choices, which is not, what is absent, yes or no after a place, many questions on one statement, a colour at the end of a question, plurals, numbers in words, chains of one relation, claims.
- **Grade 12:** scenes of two to five statements with many questions each, from several wordings, both directions, yes and no, and things the scene does not name.
- **University:** chains walked several steps, kinds three deep, counts summed, split or scaled, relations asked backwards, what follows from a rule, and arithmetic that needs a calculator.

### 🔁 Procedure

1. `dam word teach` is the teacher. It is deterministic: for every word of every line it writes
   the moves that shape the tree the line expects and answer its questions, each move run on the
   same world the network runs on. A line the teacher does not reach is never taught. It reaches
   every learned line and, as a control, every held-out line. It writes the stack and the step
   taken, at every step, as rows, and a second copy of each row with the names the lessons state
   blanked, so a name never seen reads as they do.
2. `dam word train` trains a network from the rows of the learned lines: 230,141 rows, item width
   16, 512 hidden units, AdaGrad with a learning rate of 0.05, softmax cross-entropy over the
   step classes and over the words the pointer may take. Three networks were trained, from seeds
   1, 2 and 3. Each run stopped after 300 epochs with no fewer rows taken wrongly, at between
   355 and 404 epochs, with 10 of the 230,141 rows not chosen as taught in each.

The rows are not committed; `dam word teach` makes them again.

### 🖥️ Compute

Each network trains in minutes on one consumer graphics card. The place and the power drawn were
not recorded, so the card gives no `co2_eq_emissions`.

## 📁 Files

| File | Holds |
|---|---|
| `config.json` | The step limit, the network's shape, its one voter and its step classes, and the build commit |
| `model.safetensors` | The eight tensors of the network, listed below |
| `state.bin` | The permanent state every chat starts from: the tree the seeds make |
| `LICENSE`, `NOTICE.md` | The licence and what it covers |

The tensors of `model.safetensors`, `N` being 0, the one voter:

| Tensor | Type | Shape |
|---|---|---|
| `network.N.items` | `U64` | 4,235 |
| `network.N.item_table` | `F32` | 4,235 by 16 |
| `network.N.slot_weights` | `F32` | 200 by 512 by 16 |
| `network.N.fill_weights` | `F32` | 200 by 512 |
| `network.N.hidden_bias` | `F32` | 512 |
| `network.N.output_weights` | `F32` | 104 by 512 |
| `network.N.output_bias` | `F32` | 104 |
| `network.N.point_weights` | `F32` | 512 by 16 |

No file contains code. A tensor runtime cannot run DAM1; it is read by the dam-core crate.

## 🛠️ Use

The crates are not on crates.io. Take them from the source repository. The repository must be
public, or you must be signed in with `hf auth login`, for the download to work.

From the command line, in a checkout of the source repository:

```sh
cd huggingface && cargo build --release
target/release/dam1 pull --repo DatamineNetwork/DAM1
target/release/dam1 talk --repo DatamineNetwork/DAM1 "tom has a red car." "what color is tom's car?"
```

Each text after `talk` is one turn of the same conversation. `--revision` picks a branch, tag or
commit; `--model DIR` reads a folder already on disk. Each reply is printed as JSON: `output` is
what the model said, `steps` is every step the networks chose at every word, `told` is what the
turn wrote to the tree, and `ended` says whether every word continued within the step limit.

From Rust:

```toml
[dependencies]
dam1 = { git = "https://github.com/Datamine-Crypto/DAM1" }
dam1-hub = { git = "https://github.com/Datamine-Crypto/DAM1" }
dam-page = { git = "https://github.com/Datamine-Crypto/DAM1" }
```

```rust
fn main() -> Result<(), String> {
    let folder = dam1_hub::hub::pulled("DatamineNetwork/DAM1", "main")?;
    let model = dam1::model::loaded(&folder)?;
    dam_page::load(&model.network.weights, &model.network.classes)?;
    dam_page::state(&model.state)?;
    dam_page::read("tom has a red car.", model.reading.steps)?;
    println!("{}", dam_page::read("what color is tom's car?", model.reading.steps)?);
    Ok(())
}
```

`dam_page` holds one conversation. `forget` takes it back to the seeds' state; `context` and
`restore` save and load it.

## 📊 Evaluation

The lessons are the training data. Each file mixes learned lines with lines held out of training.
Measured with `dam1 check` on these files, run from `model/`:

```sh
dam1 check --model ../huggingface/model --network data/network/release.bin
```

The check compares every tensor byte for byte with the network the files were exported from, and
the state with the seeds told again. It then reads every line with the networks alone, no teacher
and no search, from the state every seed makes. A line is right when every word of every input
continued within the step limit and the tree holds the expected shape or the output says the
expected answer.

| Lessons | Learned lines | Held-out lines |
|---|---:|---:|
| Basics | 446 of 446 (100.0%) | 142 of 142 (100.0%) |
| Grade 1 | 73 of 73 (100.0%) | 24 of 24 (100.0%) |
| Grade 2 | 688 of 688 (100.0%) | 241 of 242 (99.6%) |
| Grade 3 | 248 of 248 (100.0%) | 96 of 97 (99.0%) |
| Grade 4 | 273 of 273 (100.0%) | 91 of 91 (100.0%) |
| Grade 5 | 175 of 175 (100.0%) | 72 of 72 (100.0%) |
| Grade 6 | 158 of 158 (100.0%) | 58 of 58 (100.0%) |
| Grade 7 | 85 of 85 (100.0%) | 35 of 35 (100.0%) |
| Grade 8 | 79 of 79 (100.0%) | 33 of 33 (100.0%) |
| Grade 9 | 150 of 150 (100.0%) | 65 of 66 (98.5%) |
| Grade 10 | 26 of 26 (100.0%) | 9 of 9 (100.0%) |
| Grade 11 | 84 of 84 (100.0%) | 23 of 23 (100.0%) |
| Grade 12 | 39 of 39 (100.0%) | 11 of 11 (100.0%) |
| University | 47 of 47 (100.0%) | 13 of 13 (100.0%) |
| World and debug cases | 36 of 36 (100.0%) | 32 of 32 (100.0%) |
| **All** | **2607 of 2607 (100.0%)** | **945 of 948 (99.7%)** |

It reads every learned line of the curriculum. The three held-out lines it misses are a statement
of what we like, a question of whether one letter follows another read backward through the
alphabet, and the last day of the week asked with no week named.

The held-out lines use the same sentence shapes and many of the same words as the learned lines.
They measure new words and numbers in taught shapes. They are not an independent benchmark. No
result is given in the Hub's evaluation format, because the lessons are not a Hub benchmark
dataset.

## ⚠️ Limitations and risks

- English only, and only the sentence shapes its lessons taught. A shape it was not taught often
  reads wrong.
- It knows what it is told and what the seeds state, nothing more. It has no general world
  knowledge.
- A wrong reply looks the same as a right one. Check what it says.
- It accepts what it is told as true and says it back. It has no filter for false, harmful or
  offensive statements.
- The seeds are the project's own sentences and reflect what the project wrote.
- The stack holds 200 events and one sentence, so a very long sentence loses its first words. A
  word that does not continue within 50 steps ends the turn as not ended.

## 📖 Citation

```bibtex
@software{dam1_2026,
  author = {{Datamine Network Inc.}},
  title  = {DAM1: an LLM that reads one word at a time into a tree, with networks over its stack},
  year   = {2026},
  url    = {https://github.com/Datamine-Crypto/DAM1},
  note   = {Model files built at the commit the config records}
}
```

There is no paper.

## ✉️ Contact

Open a discussion in the Community tab of this repository, or an issue in the source repository.

## ⚖️ Licence

Copyright 2026 Datamine Network Inc. The code, the lessons, the seeds and these weights are
released under the GNU Affero General Public License, version 3 or later. If you run a modified
version for users over a network, you must offer them its source. The names DAM1 and Datamine
Network are not licensed for use by modified versions. See `LICENSE` and `NOTICE.md`.