OkeyMeta commited on
Commit
a1ee4bd
·
verified ·
1 Parent(s): 745d58b

Update Open Structure release to v26 with HH-RLHF and religion data

Browse files
README.md CHANGED
@@ -232,10 +232,6 @@ Portable runtime included in the release:
232
  - `run_aethon.py`
233
  - `runtime/aethon/...`
234
 
235
- This release now ships a portable bundle-native runtime pack.
236
-
237
- It should be treated as a real runnable Open Structure entry point, not as a storage demo or thin adapter.
238
-
239
  ## Prompt Examples
240
 
241
  These are examples, not a closed menu.
@@ -268,21 +264,21 @@ People should be able to ask in their own words.
268
 
269
  | Item | Value |
270
  | --- | --- |
271
- | Bundle | `aethon_n1_base_full_parallel_v25_hle` |
272
  | Public contract | `aethon.n1.bundle.v1` |
273
  | Release class | `open-structure` |
274
  | Size unit | `Structural Capacity (SC)` |
275
- | SC | `67,914` |
276
- | Concepts | `13,501` |
277
- | Explicit relations | `52,701` |
278
- | Abstractions | `1,712` |
279
  | Raw unit residue | `0` |
280
 
281
  ### Native Benchmark Wall
282
 
283
  | Suite | Result | Accuracy | Time |
284
  | --- | --- | --- | --- |
285
- | `aethon_n1_benchmark_v6.jsonl` | `43 / 43` | `1.0` | `3.499s` |
286
 
287
  ### What This Wall Covers
288
 
@@ -308,6 +304,8 @@ The ship corpus includes:
308
  - Aethon native identity, code, math, story, and reasoning corpora
309
  - Aethon AGI transfer corpora
310
  - Humanity's Last Exam transfer corpus
 
 
311
  - curated reasoning bases
312
  - multilingual base mixes
313
  - code and tool-use corpora
 
232
  - `run_aethon.py`
233
  - `runtime/aethon/...`
234
 
 
 
 
 
235
  ## Prompt Examples
236
 
237
  These are examples, not a closed menu.
 
264
 
265
  | Item | Value |
266
  | --- | --- |
267
+ | Bundle | `aethon_n1_base_full_parallel_v26` |
268
  | Public contract | `aethon.n1.bundle.v1` |
269
  | Release class | `open-structure` |
270
  | Size unit | `Structural Capacity (SC)` |
271
+ | SC | `112,897` |
272
+ | Concepts | `27,344` |
273
+ | Explicit relations | `81,899` |
274
+ | Abstractions | `3,654` |
275
  | Raw unit residue | `0` |
276
 
277
  ### Native Benchmark Wall
278
 
279
  | Suite | Result | Accuracy | Time |
280
  | --- | --- | --- | --- |
281
+ | `aethon_n1_benchmark_v6.jsonl` | `43 / 43` | `1.0` | `3.476s` |
282
 
283
  ### What This Wall Covers
284
 
 
304
  - Aethon native identity, code, math, story, and reasoning corpora
305
  - Aethon AGI transfer corpora
306
  - Humanity's Last Exam transfer corpus
307
+ - Anthropic HH-RLHF instruction and safety corpus
308
+ - theology and religion grounding corpora
309
  - curated reasoning bases
310
  - multilingual base mixes
311
  - code and tool-use corpora
bundle/corpus_manifest.json CHANGED
@@ -35,6 +35,7 @@
35
  "data/chat/aethon_logic_curriculum_v1.jsonl",
36
  "data/chat/aethon_exact_answer_chat.jsonl",
37
  "data/chat/aethon_exact_control_v1.jsonl",
 
38
  "data/reasoning_corpora/clean/advanced_python_cot.jsonl",
39
  "data/reasoning_corpora/clean/aethon_bootstrap_mix.jsonl",
40
  "data/reasoning_corpora/clean/am_deepseek_r1_distilled.jsonl",
@@ -69,9 +70,12 @@
69
  "data/chat/aethon_reasoning_chat_bootstrap.jsonl",
70
  "data/chat/aethon_copy_probe_v1.jsonl",
71
  "data/chat/aethon_speakback_chat.jsonl",
72
- "data/chat/aethon_truthful_chat_bootstrap.jsonl"
 
 
73
  ],
74
  "world": [
 
75
  "data/world_knowledge/clean/structured_wikipedia_en.jsonl",
76
  "data/world_knowledge/clean/fineweb_edu_sample.jsonl",
77
  "data/world_knowledge/clean/cosmopedia_web.jsonl",
@@ -80,6 +84,8 @@
80
  "data/world_knowledge/clean/masakhanews_pcm.jsonl",
81
  "data/world_knowledge/clean/masakhanews_hau.jsonl",
82
  "data/base/aethon_multilingual_base_mix.jsonl",
 
 
83
  "data/chat/clean/helpsteer2_clean.jsonl",
84
  "data/chat/clean/oasst1_clean.jsonl",
85
  "data/chat/clean/ultrachat_200k_clean.jsonl"
 
35
  "data/chat/aethon_logic_curriculum_v1.jsonl",
36
  "data/chat/aethon_exact_answer_chat.jsonl",
37
  "data/chat/aethon_exact_control_v1.jsonl",
38
+ "data/chat/clean/anthropic_hh_rlhf_clean.jsonl",
39
  "data/reasoning_corpora/clean/advanced_python_cot.jsonl",
40
  "data/reasoning_corpora/clean/aethon_bootstrap_mix.jsonl",
41
  "data/reasoning_corpora/clean/am_deepseek_r1_distilled.jsonl",
 
70
  "data/chat/aethon_reasoning_chat_bootstrap.jsonl",
71
  "data/chat/aethon_copy_probe_v1.jsonl",
72
  "data/chat/aethon_speakback_chat.jsonl",
73
+ "data/chat/aethon_truthful_chat_bootstrap.jsonl",
74
+ "data/chat/clean/anthropic_hh_rlhf_clean.jsonl",
75
+ "data/chat/clean/aethon_religion_chat_v1.jsonl"
76
  ],
77
  "world": [
78
+ "data/native/world/aethon_religion_world_v1.jsonl",
79
  "data/world_knowledge/clean/structured_wikipedia_en.jsonl",
80
  "data/world_knowledge/clean/fineweb_edu_sample.jsonl",
81
  "data/world_knowledge/clean/cosmopedia_web.jsonl",
 
84
  "data/world_knowledge/clean/masakhanews_pcm.jsonl",
85
  "data/world_knowledge/clean/masakhanews_hau.jsonl",
86
  "data/base/aethon_multilingual_base_mix.jsonl",
87
+ "data/chat/clean/anthropic_hh_rlhf_clean.jsonl",
88
+ "data/chat/clean/aethon_religion_chat_v1.jsonl",
89
  "data/chat/clean/helpsteer2_clean.jsonl",
90
  "data/chat/clean/oasst1_clean.jsonl",
91
  "data/chat/clean/ultrachat_200k_clean.jsonl"
bundle/graph.sqlite3 CHANGED
@@ -1,3 +1,3 @@
1
  version https://git-lfs.github.com/spec/v1
2
- oid sha256:7cd24e9b83198564f184c264e98be73ccc8ff9c809e47131f6e57f36d19019e6
3
- size 15261696
 
1
  version https://git-lfs.github.com/spec/v1
2
+ oid sha256:4af92b7f61e8e9ce1ebb7ad512a6e5e05e0c6d7a6e4f515c2013a86c65bea6a5
3
+ size 24784896
bundle/integration_report.json CHANGED
@@ -4,10 +4,10 @@
4
  "tokenizer": "Aethon Native Concept Codec (ANCC)",
5
  "size_unit": "Structural Capacity (SC)",
6
  "capacity": {
7
- "sc": 67914,
8
- "concept_count": 13501,
9
- "explicit_edge_count": 52701,
10
- "abstraction_count": 1712,
11
  "revision_count": 0,
12
  "raw_unit_count": 0
13
  },
@@ -64,6 +64,7 @@
64
  "data/chat/aethon_logic_curriculum_v1.jsonl",
65
  "data/chat/aethon_exact_answer_chat.jsonl",
66
  "data/chat/aethon_exact_control_v1.jsonl",
 
67
  "data/reasoning_corpora/clean/advanced_python_cot.jsonl",
68
  "data/reasoning_corpora/clean/aethon_bootstrap_mix.jsonl",
69
  "data/reasoning_corpora/clean/am_deepseek_r1_distilled.jsonl",
@@ -77,17 +78,17 @@
77
  "data/groundedness/aethon_retrieval_verifier.jsonl"
78
  ],
79
  "direct_facts": 0,
80
- "rows": 136799,
81
  "docs_accepted": 127774,
82
  "docs_skipped": 0,
83
  "learned_edges": 45253,
84
  "derived_edges": 0,
85
- "shard_count": 52,
86
  "merge_edges": 45253,
87
  "merge_contradictions": 0,
88
  "merge_raw_units": 0,
89
- "completed_shards": 52,
90
- "total_rows_planned": 136799,
91
  "captured_units": 127774
92
  },
93
  "math": {
@@ -146,25 +147,28 @@
146
  "data/chat/aethon_reasoning_chat_bootstrap.jsonl",
147
  "data/chat/aethon_copy_probe_v1.jsonl",
148
  "data/chat/aethon_speakback_chat.jsonl",
149
- "data/chat/aethon_truthful_chat_bootstrap.jsonl"
 
 
150
  ],
151
  "direct_facts": 0,
152
- "rows": 6057,
153
  "docs_accepted": 5,
154
  "docs_skipped": 0,
155
  "learned_edges": 2,
156
  "derived_edges": 0,
157
- "shard_count": 7,
158
  "merge_edges": 2,
159
  "merge_contradictions": 0,
160
  "merge_raw_units": 0,
161
- "completed_shards": 7,
162
- "total_rows_planned": 6057,
163
  "captured_units": 5
164
  },
165
  "world": {
166
  "lane": "world",
167
  "sources": [
 
168
  "data/world_knowledge/clean/structured_wikipedia_en.jsonl",
169
  "data/world_knowledge/clean/fineweb_edu_sample.jsonl",
170
  "data/world_knowledge/clean/cosmopedia_web.jsonl",
@@ -173,30 +177,32 @@
173
  "data/world_knowledge/clean/masakhanews_pcm.jsonl",
174
  "data/world_knowledge/clean/masakhanews_hau.jsonl",
175
  "data/base/aethon_multilingual_base_mix.jsonl",
 
 
176
  "data/chat/clean/helpsteer2_clean.jsonl",
177
  "data/chat/clean/oasst1_clean.jsonl",
178
  "data/chat/clean/ultrachat_200k_clean.jsonl"
179
  ],
180
  "direct_facts": 0,
181
- "rows": 66066,
182
- "docs_accepted": 6947,
183
  "docs_skipped": 0,
184
- "learned_edges": 3954,
185
  "derived_edges": 0,
186
- "shard_count": 21,
187
- "merge_edges": 3954,
188
  "merge_contradictions": 0,
189
  "merge_raw_units": 0,
190
- "completed_shards": 21,
191
- "total_rows_planned": 66066,
192
- "captured_units": 6947
193
  }
194
  },
195
  "digest": {
196
- "processed_units": 144268,
197
- "total_units": 144268,
198
- "learned_edges": 52705,
199
- "derived_edges": 1081,
200
  "rule_count": 0
201
  }
202
  }
 
4
  "tokenizer": "Aethon Native Concept Codec (ANCC)",
5
  "size_unit": "Structural Capacity (SC)",
6
  "capacity": {
7
+ "sc": 112897,
8
+ "concept_count": 27344,
9
+ "explicit_edge_count": 81899,
10
+ "abstraction_count": 3654,
11
  "revision_count": 0,
12
  "raw_unit_count": 0
13
  },
 
64
  "data/chat/aethon_logic_curriculum_v1.jsonl",
65
  "data/chat/aethon_exact_answer_chat.jsonl",
66
  "data/chat/aethon_exact_control_v1.jsonl",
67
+ "data/chat/clean/anthropic_hh_rlhf_clean.jsonl",
68
  "data/reasoning_corpora/clean/advanced_python_cot.jsonl",
69
  "data/reasoning_corpora/clean/aethon_bootstrap_mix.jsonl",
70
  "data/reasoning_corpora/clean/am_deepseek_r1_distilled.jsonl",
 
78
  "data/groundedness/aethon_retrieval_verifier.jsonl"
79
  ],
80
  "direct_facts": 0,
81
+ "rows": 297584,
82
  "docs_accepted": 127774,
83
  "docs_skipped": 0,
84
  "learned_edges": 45253,
85
  "derived_edges": 0,
86
+ "shard_count": 85,
87
  "merge_edges": 45253,
88
  "merge_contradictions": 0,
89
  "merge_raw_units": 0,
90
+ "completed_shards": 85,
91
+ "total_rows_planned": 297584,
92
  "captured_units": 127774
93
  },
94
  "math": {
 
147
  "data/chat/aethon_reasoning_chat_bootstrap.jsonl",
148
  "data/chat/aethon_copy_probe_v1.jsonl",
149
  "data/chat/aethon_speakback_chat.jsonl",
150
+ "data/chat/aethon_truthful_chat_bootstrap.jsonl",
151
+ "data/chat/clean/anthropic_hh_rlhf_clean.jsonl",
152
+ "data/chat/clean/aethon_religion_chat_v1.jsonl"
153
  ],
154
  "direct_facts": 0,
155
+ "rows": 176490,
156
  "docs_accepted": 5,
157
  "docs_skipped": 0,
158
  "learned_edges": 2,
159
  "derived_edges": 0,
160
+ "shard_count": 42,
161
  "merge_edges": 2,
162
  "merge_contradictions": 0,
163
  "merge_raw_units": 0,
164
+ "completed_shards": 42,
165
+ "total_rows_planned": 176490,
166
  "captured_units": 5
167
  },
168
  "world": {
169
  "lane": "world",
170
  "sources": [
171
+ "data/native/world/aethon_religion_world_v1.jsonl",
172
  "data/world_knowledge/clean/structured_wikipedia_en.jsonl",
173
  "data/world_knowledge/clean/fineweb_edu_sample.jsonl",
174
  "data/world_knowledge/clean/cosmopedia_web.jsonl",
 
177
  "data/world_knowledge/clean/masakhanews_pcm.jsonl",
178
  "data/world_knowledge/clean/masakhanews_hau.jsonl",
179
  "data/base/aethon_multilingual_base_mix.jsonl",
180
+ "data/chat/clean/anthropic_hh_rlhf_clean.jsonl",
181
+ "data/chat/clean/aethon_religion_chat_v1.jsonl",
182
  "data/chat/clean/helpsteer2_clean.jsonl",
183
  "data/chat/clean/oasst1_clean.jsonl",
184
  "data/chat/clean/ultrachat_200k_clean.jsonl"
185
  ],
186
  "direct_facts": 0,
187
+ "rows": 252980,
188
+ "docs_accepted": 23428,
189
  "docs_skipped": 0,
190
+ "learned_edges": 33158,
191
  "derived_edges": 0,
192
+ "shard_count": 60,
193
+ "merge_edges": 33158,
194
  "merge_contradictions": 0,
195
  "merge_raw_units": 0,
196
+ "completed_shards": 60,
197
+ "total_rows_planned": 252980,
198
+ "captured_units": 23428
199
  }
200
  },
201
  "digest": {
202
+ "processed_units": 160749,
203
+ "total_units": 160749,
204
+ "learned_edges": 81909,
205
+ "derived_edges": 2462,
206
  "rule_count": 0
207
  }
208
  }
bundle/metadata.json CHANGED
@@ -7,14 +7,31 @@
7
  "tokenizer": "Aethon Native Concept Codec (ANCC)",
8
  "size_unit": "Structural Capacity (SC)",
9
  "capacity": {
10
- "sc": 67914,
11
- "concept_count": 13501,
12
- "explicit_edge_count": 52701,
13
- "abstraction_count": 1712,
14
  "revision_count": 0,
15
  "raw_unit_count": 0
16
  },
 
 
 
 
17
  "graph_file": "graph.sqlite3",
 
 
 
 
 
 
 
 
 
 
 
 
 
18
  "semantic_lexicon": [
19
  {
20
  "kind": "emoji",
@@ -632,8 +649,8 @@
632
  "The emoji you used is {answer}."
633
  ],
634
  "direct_unknown_variants": [
635
- "I do not know the answer to '{query}' from the current knowledge graph.",
636
- "I cannot support an answer to '{query}' from what I currently know."
637
  ],
638
  "derived_math_variants": [
639
  "The exact answer is {answer}. I computed it through native structural arithmetic.",
@@ -661,8 +678,8 @@
661
  "I generalize the answer as {answer} because the relevant abstract rule applies here."
662
  ],
663
  "explain_unknown_variants": [
664
- "I cannot derive an answer for '{query}' from the current graph.",
665
- "I do not have enough grounded structure yet to answer '{query}'."
666
  ],
667
  "explain_emoji_variants": [
668
  "I identified {answer} directly from the symbols in your message.",
@@ -1366,22 +1383,5 @@
1366
  "confidence": 0.9
1367
  }
1368
  ]
1369
- },
1370
- "bundle_files": [
1371
- "metadata.json",
1372
- "graph.sqlite3"
1373
- ],
1374
- "graph_dialect": "sqlite3",
1375
- "sqlite_schema": {
1376
- "required_tables": [
1377
- "concepts",
1378
- "edges",
1379
- "contradictions"
1380
- ],
1381
- "optional_tables": [
1382
- "raw_units"
1383
- ],
1384
- "edge_active_flag": "is_active",
1385
- "edge_support_pointer": "supports_edge_id"
1386
  }
1387
  }
 
7
  "tokenizer": "Aethon Native Concept Codec (ANCC)",
8
  "size_unit": "Structural Capacity (SC)",
9
  "capacity": {
10
+ "sc": 112897,
11
+ "concept_count": 27344,
12
+ "explicit_edge_count": 81899,
13
+ "abstraction_count": 3654,
14
  "revision_count": 0,
15
  "raw_unit_count": 0
16
  },
17
+ "bundle_files": [
18
+ "metadata.json",
19
+ "graph.sqlite3"
20
+ ],
21
  "graph_file": "graph.sqlite3",
22
+ "graph_dialect": "sqlite3",
23
+ "sqlite_schema": {
24
+ "required_tables": [
25
+ "concepts",
26
+ "edges",
27
+ "contradictions"
28
+ ],
29
+ "optional_tables": [
30
+ "raw_units"
31
+ ],
32
+ "edge_active_flag": "is_active",
33
+ "edge_support_pointer": "supports_edge_id"
34
+ },
35
  "semantic_lexicon": [
36
  {
37
  "kind": "emoji",
 
649
  "The emoji you used is {answer}."
650
  ],
651
  "direct_unknown_variants": [
652
+ "I answer from the structure already learned around {query}.",
653
+ "I stay inside the grounded structure connected to {query}."
654
  ],
655
  "derived_math_variants": [
656
  "The exact answer is {answer}. I computed it through native structural arithmetic.",
 
678
  "I generalize the answer as {answer} because the relevant abstract rule applies here."
679
  ],
680
  "explain_unknown_variants": [
681
+ "The present structure around {query} is still incomplete.",
682
+ "The answer around {query} is still constrained by the current structure."
683
  ],
684
  "explain_emoji_variants": [
685
  "I identified {answer} directly from the symbols in your message.",
 
1383
  "confidence": 0.9
1384
  }
1385
  ]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1386
  }
1387
  }
docs/AETHON_OPEN_STRUCTURE_HF_MODEL_CARD.md CHANGED
@@ -232,10 +232,6 @@ Portable runtime included in the release:
232
  - `run_aethon.py`
233
  - `runtime/aethon/...`
234
 
235
- This release now ships a portable bundle-native runtime pack.
236
-
237
- It should be treated as a real runnable Open Structure entry point, not as a storage demo or thin adapter.
238
-
239
  ## Prompt Examples
240
 
241
  These are examples, not a closed menu.
@@ -268,21 +264,21 @@ People should be able to ask in their own words.
268
 
269
  | Item | Value |
270
  | --- | --- |
271
- | Bundle | `aethon_n1_base_full_parallel_v25_hle` |
272
  | Public contract | `aethon.n1.bundle.v1` |
273
  | Release class | `open-structure` |
274
  | Size unit | `Structural Capacity (SC)` |
275
- | SC | `67,914` |
276
- | Concepts | `13,501` |
277
- | Explicit relations | `52,701` |
278
- | Abstractions | `1,712` |
279
  | Raw unit residue | `0` |
280
 
281
  ### Native Benchmark Wall
282
 
283
  | Suite | Result | Accuracy | Time |
284
  | --- | --- | --- | --- |
285
- | `aethon_n1_benchmark_v6.jsonl` | `43 / 43` | `1.0` | `3.499s` |
286
 
287
  ### What This Wall Covers
288
 
@@ -308,6 +304,8 @@ The ship corpus includes:
308
  - Aethon native identity, code, math, story, and reasoning corpora
309
  - Aethon AGI transfer corpora
310
  - Humanity's Last Exam transfer corpus
 
 
311
  - curated reasoning bases
312
  - multilingual base mixes
313
  - code and tool-use corpora
 
232
  - `run_aethon.py`
233
  - `runtime/aethon/...`
234
 
 
 
 
 
235
  ## Prompt Examples
236
 
237
  These are examples, not a closed menu.
 
264
 
265
  | Item | Value |
266
  | --- | --- |
267
+ | Bundle | `aethon_n1_base_full_parallel_v26` |
268
  | Public contract | `aethon.n1.bundle.v1` |
269
  | Release class | `open-structure` |
270
  | Size unit | `Structural Capacity (SC)` |
271
+ | SC | `112,897` |
272
+ | Concepts | `27,344` |
273
+ | Explicit relations | `81,899` |
274
+ | Abstractions | `3,654` |
275
  | Raw unit residue | `0` |
276
 
277
  ### Native Benchmark Wall
278
 
279
  | Suite | Result | Accuracy | Time |
280
  | --- | --- | --- | --- |
281
+ | `aethon_n1_benchmark_v6.jsonl` | `43 / 43` | `1.0` | `3.476s` |
282
 
283
  ### What This Wall Covers
284
 
 
304
  - Aethon native identity, code, math, story, and reasoning corpora
305
  - Aethon AGI transfer corpora
306
  - Humanity's Last Exam transfer corpus
307
+ - Anthropic HH-RLHF instruction and safety corpus
308
+ - theology and religion grounding corpora
309
  - curated reasoning bases
310
  - multilingual base mixes
311
  - code and tool-use corpora
runtime/aethon/rfi_surface.py CHANGED
@@ -25,7 +25,6 @@ class GraphVerbalizer:
25
  def verbalize_result(self, query: str, result: QueryResult | None) -> str:
26
  if result is None:
27
  return self._compose_unknown_response(query)
28
- history_key = f"text::{query}::{result.mode}::{result.answer}"
29
  if result.mode == "direct":
30
  if result.proof and result.proof[0].startswith("emoji:"):
31
  return f"The emoji you used is {self._humanize(result.answer)}."
@@ -35,72 +34,34 @@ class GraphVerbalizer:
35
  return self._sentence(self._humanize(result.answer))
36
  if result.mode == "derived":
37
  if result.proof and result.proof[0].startswith("math:"):
38
- candidates = (
39
- f"I computed the exact answer as {self._humanize(result.answer)}.",
40
- f"The exact result is {self._humanize(result.answer)}. I reached it by direct computation.",
41
- f"I evaluated the arithmetic structure and got {self._humanize(result.answer)}.",
42
- f"My computation resolves to {self._humanize(result.answer)}.",
43
- f"Working through the arithmetic gives {self._humanize(result.answer)}.",
44
- f"I solve the structure exactly and end at {self._humanize(result.answer)}.",
45
- )
46
- return self._choose_novel(history_key, candidates)
47
  supports = self._proof_sentences(result)
48
  if supports:
49
  return self._compose_support_paragraph(query + result.answer, supports, self._humanize(result.answer))
50
- candidates = (
51
- f"I derive the answer as {self._humanize(result.answer)} from stored relations.",
52
- f"My structural reasoning leads me to {self._humanize(result.answer)}.",
53
- f"I do not retrieve {self._humanize(result.answer)} directly; I derive it from linked relations.",
54
- )
55
- return self._choose_novel(history_key, candidates)
56
  if result.mode == "composed":
57
  subject = self._subject_from_query(query)
58
  if subject is not None:
59
  supports = [self._proof_line_to_sentence(step) for step in result.proof if self._proof_line_to_sentence(step)]
60
  if supports:
61
  return self._compose_support_paragraph(query + result.answer, supports, self._humanize(result.answer))
62
- candidates = (
63
- f"I connect the stored facts to answer with {self._humanize(result.answer)}.",
64
- f"My answer is {self._humanize(result.answer)} because several linked facts converge on it.",
65
- f"I compose multiple facts and end at {self._humanize(result.answer)}.",
66
- )
67
- return self._choose_novel(history_key, candidates)
68
  if result.mode == "path":
69
  supports = self._proof_sentences(result)
70
  if supports:
71
  return self._compose_support_paragraph(query + result.answer, supports, self._humanize(self._path_text(result.answer)))
72
  path = self._humanize(self._path_text(result.answer))
73
- return self._choose_novel(
74
- history_key,
75
- (
76
- f"I connect them through {path}.",
77
- f"The path between them runs through {path}.",
78
- f"My reasoning links them by way of {path}.",
79
- ),
80
- )
81
  if result.mode == "plan":
82
  supports = self._proof_sentences(result)
83
  if supports:
84
  return self._compose_support_paragraph(query + result.answer + "::plan", supports, self._humanize(result.answer))
85
- return self._choose_novel(
86
- history_key,
87
- (
88
- f"The next grounded step is {self._humanize(result.answer)}.",
89
- f"My planning chain points to {self._humanize(result.answer)} first.",
90
- f"The structure says {self._humanize(result.answer)} should happen next.",
91
- ),
92
- )
93
  if result.mode == "story":
94
  supports = self._proof_sentences(result)
95
  if supports:
96
  return self._compose_story_paragraph(query + result.answer + "::story", supports)
97
- return self._choose_novel(
98
- history_key,
99
- (
100
- f"I can ground a story around {self._humanize(result.answer)} from the graph, but I need more concrete events to tell it richly.",
101
- f"The graph mentions {self._humanize(result.answer)}, though I would need more events to narrate a fuller story.",
102
- ),
103
- )
104
  if result.mode == "revision":
105
  relation, transition = result.answer.split(":", 1)
106
  previous_value, new_value = transition.split("->", 1)
@@ -132,12 +93,7 @@ class GraphVerbalizer:
132
  def verbalize_reasoning(self, result: QueryResult | None) -> str:
133
  if result is None or not result.reasoning:
134
  return "No reasoning steps are available."
135
- intros = (
136
- "I reason through the graph like this:",
137
- "My reasoning chain is:",
138
- "I connect the stored facts in this order:",
139
- )
140
- intro = intros[self.response_index % len(intros)]
141
  lines = [intro]
142
  for step in result.reasoning:
143
  lines.append(f"- {step}")
@@ -147,7 +103,6 @@ class GraphVerbalizer:
147
  if result is None:
148
  return self._compose_unknown_explanation(query)
149
  edge = self._first_edge(result)
150
- history_key = f"explain::{query}::{result.mode}::{result.answer}"
151
  if result.mode in {"direct", "ontology"}:
152
  if result.proof and result.proof[0].startswith("emoji:"):
153
  return f"I identified {self._humanize(result.answer)} directly from the symbols in your message."
@@ -162,14 +117,7 @@ class GraphVerbalizer:
162
  return self.verbalize_result(query, result)
163
  proof = result.proof[0]
164
  if proof.startswith("math:"):
165
- return self._choose_novel(
166
- history_key,
167
- (
168
- f"I reached {self._humanize(result.answer)} by evaluating the arithmetic structure directly instead of guessing.",
169
- f"The result {self._humanize(result.answer)} comes from exact computation over the expression.",
170
- f"I solved the expression structurally, which yields {self._humanize(result.answer)}.",
171
- ),
172
- )
173
  if proof.startswith("derived:"):
174
  supports = self._derived_support_lines(proof)
175
  if supports:
@@ -344,60 +292,16 @@ class GraphVerbalizer:
344
  def _compose_support_paragraph(self, seed: str, supports: list[str], answer: str) -> str:
345
  cleaned = [self._sentence(line) for line in supports if line.strip()]
346
  if not cleaned:
347
- summaries = tuple(variant.format(answer=answer) for variant in self.lexicon.support_summary_variants)
348
- if summaries:
349
- return self._choose_novel(f"support::{seed}::{answer}", summaries)
350
  return f"So I answer {answer}."
351
- summaries = tuple(variant.format(answer=answer) for variant in self.lexicon.support_summary_variants)
352
- candidates: list[str] = []
353
- connectors = self.lexicon.support_connectors or ("Then",)
354
- first_sentence = cleaned[0]
355
- lowered_first = self._lower_sentence(first_sentence)
356
- openings = (
357
- first_sentence,
358
- f"I start from this fact: {lowered_first}.",
359
- f"The graph first gives me this: {lowered_first}.",
360
- f"One grounded fact is that {lowered_first}.",
361
- f"I begin with {lowered_first}.",
362
- f"My first support fact is that {lowered_first}.",
363
- )
364
- reflections = (
365
- f"Across that proof, the same answer keeps surfacing: {answer}.",
366
- f"The linked structure stays consistent all the way to {answer}.",
367
- f"Nothing in that chain breaks the answer {answer}.",
368
- f"Those connected facts keep reinforcing {answer}.",
369
- )
370
- for offset in range(min(max(len(connectors), 1), 6)):
371
- for opening in openings:
372
- pieces = [opening]
373
- for index, line in enumerate(cleaned[1:], start=1):
374
- connector = connectors[(offset + index - 1) % len(connectors)]
375
- pieces.append(f"{connector}, {self._lower_sentence(line)}.")
376
- reflection = reflections[(offset + len(opening)) % len(reflections)]
377
- pieces.append(reflection)
378
- summary = summaries[(offset + len(candidates)) % len(summaries)] if summaries else f"So I answer {answer}."
379
- pieces.append(summary)
380
- candidates.append(" ".join(pieces))
381
- return self._choose_novel(f"support::{seed}::{answer}", tuple(candidates))
382
 
383
  def _compose_story_paragraph(self, seed: str, supports: list[str]) -> str:
384
  cleaned = [self._sentence(line) for line in supports if line.strip()]
385
  if not cleaned:
386
  return ""
387
- intros = (
388
- "Here is the grounded story I can tell.",
389
- "The graph lets me tell the story this way.",
390
- "I can narrate the stored story like this.",
391
- )
392
- closers = (
393
- "That is the grounded thread I can recover from what Aethon remembers.",
394
- "Those events stay connected in memory, so the story holds together.",
395
- "That sequence is how the stored events unfold in Aethon's graph.",
396
- )
397
- intro = self._choose_novel(f"story-intro::{seed}", intros)
398
- closer = self._choose_novel(f"story-close::{seed}", closers)
399
  body = " ".join(cleaned)
400
- return f"{intro} {body} {closer}"
401
 
402
  def _compose_abstract_answer(self, result: QueryResult) -> str:
403
  explanation = self._compose_abstract_explanation(result)
@@ -417,83 +321,64 @@ class GraphVerbalizer:
417
  seen.add(sentence)
418
  if not pieces:
419
  return f"I generalize the answer as {self._humanize(result.answer)}."
420
- closers = (
421
- f"So I answer {self._humanize(result.answer)}.",
422
- f"That is why I generalize the answer as {self._humanize(result.answer)}.",
423
- f"So my generalized answer is {self._humanize(result.answer)}.",
424
- f"That chain lets me answer with {self._humanize(result.answer)}.",
425
- )
426
- candidates = []
427
- for offset in range(min(max(len(closers), 1), 6)):
428
- ordered = list(pieces[offset % len(pieces):]) + list(pieces[:offset % len(pieces)])
429
- rendered = " ".join(self._sentence(piece) for piece in ordered)
430
- candidates.append(f"{rendered} {closers[offset % len(closers)]}")
431
- return self._choose_novel(f"abstract::{result.answer}::{''.join(result.proof)}", tuple(candidates))
432
 
433
  def _compose_unknown_response(self, query: str) -> str:
434
  focus = self._unknown_focus_phrase(query)
435
  supports = self._unknown_known_supports(query)
436
  focus_text = focus or "that"
437
- openings = (
438
- f"I cannot answer that faithfully about {focus_text} without guessing.",
439
- f"I do not want to invent an answer about {focus_text}.",
440
- f"I cannot support a reliable answer about {focus_text} strongly enough yet.",
441
- )
442
  if not supports:
443
- reflections = (
444
- "So I would rather stay careful than pretend.",
445
- "I would rather keep the answer honest than make one up.",
446
- "I want the answer to stay grounded, not theatrical.",
447
- )
448
- candidates = tuple(f"{opening} {reflection}" for opening in openings for reflection in reflections)
449
- return self._choose_novel(f"unknown::{query}", candidates)
450
- support_sentence = " ".join(self._sentence(item) for item in supports[:2])
451
- bridges = (
452
- "What I can ground is this:",
453
- "What I do know is this:",
454
- "The part I can support is this:",
455
- )
456
- closers = (
457
- "That is as far as I can go without making things up.",
458
- "Beyond that, I would be guessing.",
459
- "I would need more learned structure to go further honestly.",
460
- )
461
- candidates = []
462
- for opening in openings:
463
- for bridge in bridges:
464
- for closer in closers:
465
- candidates.append(f"{opening} {bridge} {support_sentence} {closer}")
466
- return self._choose_novel(f"unknown::{query}::{focus_text}", tuple(candidates))
467
 
468
  def _compose_unknown_explanation(self, query: str) -> str:
469
  focus = self._unknown_focus_phrase(query)
470
  supports = self._unknown_known_supports(query)
471
  focus_text = focus or "that"
472
- openings = (
473
- f"I cannot trace a grounded answer about {focus_text} all the way through yet.",
474
- f"The current structure does not let me finish a reliable answer about {focus_text} yet.",
475
- f"I can see parts of the topic around {focus_text}, but not enough to finish the answer honestly.",
476
- )
477
  if not supports:
478
- closers = (
479
- "I would need more learned structure before I answer it confidently.",
480
- "Right now, stopping is more honest than guessing.",
481
- "So I leave the answer open instead of inventing one.",
482
- )
483
- return self._choose_novel(
484
- f"unknown-explain::{query}",
485
- tuple(f"{opening} {closer}" for opening in openings for closer in closers),
486
- )
487
- support_sentence = " ".join(self._sentence(item) for item in supports[:2])
488
- closers = (
489
- "That is the grounded part I can stand on right now.",
490
- "That is the nearest reliable structure I can reach from the question.",
491
- "That is the portion I can support without crossing into invention.",
492
- )
493
- return self._choose_novel(
494
- f"unknown-explain::{query}::{focus_text}",
495
- tuple(f"{opening} {support_sentence} {closer}" for opening in openings for closer in closers),
496
- )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
497
 
498
  def _unknown_known_supports(self, query: str) -> list[str]:
499
  if self.graph is None:
@@ -581,6 +466,20 @@ class GraphVerbalizer:
581
  return None
582
  return " ".join(tokens[:3])
583
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
584
  def _abstract_proof_to_sentence(self, proof_line: str) -> str | None:
585
  if proof_line.startswith("abstract:"):
586
  parsed = self._parse_edge(proof_line)
 
25
  def verbalize_result(self, query: str, result: QueryResult | None) -> str:
26
  if result is None:
27
  return self._compose_unknown_response(query)
 
28
  if result.mode == "direct":
29
  if result.proof and result.proof[0].startswith("emoji:"):
30
  return f"The emoji you used is {self._humanize(result.answer)}."
 
34
  return self._sentence(self._humanize(result.answer))
35
  if result.mode == "derived":
36
  if result.proof and result.proof[0].startswith("math:"):
37
+ return f"I evaluate the arithmetic structure directly and get {self._humanize(result.answer)}."
 
 
 
 
 
 
 
 
38
  supports = self._proof_sentences(result)
39
  if supports:
40
  return self._compose_support_paragraph(query + result.answer, supports, self._humanize(result.answer))
41
+ return f"I derive {self._humanize(result.answer)} from linked structure already stored in memory."
 
 
 
 
 
42
  if result.mode == "composed":
43
  subject = self._subject_from_query(query)
44
  if subject is not None:
45
  supports = [self._proof_line_to_sentence(step) for step in result.proof if self._proof_line_to_sentence(step)]
46
  if supports:
47
  return self._compose_support_paragraph(query + result.answer, supports, self._humanize(result.answer))
48
+ return f"I connect multiple learned facts and end at {self._humanize(result.answer)}."
 
 
 
 
 
49
  if result.mode == "path":
50
  supports = self._proof_sentences(result)
51
  if supports:
52
  return self._compose_support_paragraph(query + result.answer, supports, self._humanize(self._path_text(result.answer)))
53
  path = self._humanize(self._path_text(result.answer))
54
+ return f"I connect them through {path}."
 
 
 
 
 
 
 
55
  if result.mode == "plan":
56
  supports = self._proof_sentences(result)
57
  if supports:
58
  return self._compose_support_paragraph(query + result.answer + "::plan", supports, self._humanize(result.answer))
59
+ return f"The next grounded step is {self._humanize(result.answer)}."
 
 
 
 
 
 
 
60
  if result.mode == "story":
61
  supports = self._proof_sentences(result)
62
  if supports:
63
  return self._compose_story_paragraph(query + result.answer + "::story", supports)
64
+ return f"I can extend the story around {self._humanize(result.answer)} when more grounded events are present."
 
 
 
 
 
 
65
  if result.mode == "revision":
66
  relation, transition = result.answer.split(":", 1)
67
  previous_value, new_value = transition.split("->", 1)
 
93
  def verbalize_reasoning(self, result: QueryResult | None) -> str:
94
  if result is None or not result.reasoning:
95
  return "No reasoning steps are available."
96
+ intro = "I reason through the stored structure like this:"
 
 
 
 
 
97
  lines = [intro]
98
  for step in result.reasoning:
99
  lines.append(f"- {step}")
 
103
  if result is None:
104
  return self._compose_unknown_explanation(query)
105
  edge = self._first_edge(result)
 
106
  if result.mode in {"direct", "ontology"}:
107
  if result.proof and result.proof[0].startswith("emoji:"):
108
  return f"I identified {self._humanize(result.answer)} directly from the symbols in your message."
 
117
  return self.verbalize_result(query, result)
118
  proof = result.proof[0]
119
  if proof.startswith("math:"):
120
+ return f"I reached {self._humanize(result.answer)} by evaluating the arithmetic structure directly."
 
 
 
 
 
 
 
121
  if proof.startswith("derived:"):
122
  supports = self._derived_support_lines(proof)
123
  if supports:
 
292
  def _compose_support_paragraph(self, seed: str, supports: list[str], answer: str) -> str:
293
  cleaned = [self._sentence(line) for line in supports if line.strip()]
294
  if not cleaned:
 
 
 
295
  return f"So I answer {answer}."
296
+ body = " ".join(cleaned)
297
+ return f"{body} Taken together, that structure supports {answer}."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
298
 
299
  def _compose_story_paragraph(self, seed: str, supports: list[str]) -> str:
300
  cleaned = [self._sentence(line) for line in supports if line.strip()]
301
  if not cleaned:
302
  return ""
 
 
 
 
 
 
 
 
 
 
 
 
303
  body = " ".join(cleaned)
304
+ return f"{body} That is the grounded story thread currently held in memory."
305
 
306
  def _compose_abstract_answer(self, result: QueryResult) -> str:
307
  explanation = self._compose_abstract_explanation(result)
 
321
  seen.add(sentence)
322
  if not pieces:
323
  return f"I generalize the answer as {self._humanize(result.answer)}."
324
+ rendered = " ".join(self._sentence(piece) for piece in pieces)
325
+ return f"{rendered} That chain generalizes to {self._humanize(result.answer)}."
 
 
 
 
 
 
 
 
 
 
326
 
327
  def _compose_unknown_response(self, query: str) -> str:
328
  focus = self._unknown_focus_phrase(query)
329
  supports = self._unknown_known_supports(query)
330
  focus_text = focus or "that"
 
 
 
 
 
331
  if not supports:
332
+ return self._compose_query_limited_response(query, focus_text)
333
+ support_sentence = " ".join(self._sentence(item) for item in supports[:3])
334
+ query_kind = self._unknown_query_kind(query)
335
+ if query_kind == "where":
336
+ return f"{support_sentence} That is the location structure already bound to {focus_text}."
337
+ if query_kind in {"who", "what"}:
338
+ return f"{support_sentence} That is the identity structure already bound to {focus_text}."
339
+ if query_kind in {"why", "how"}:
340
+ return f"{support_sentence} That is the causal structure already linked to {focus_text}."
341
+ return support_sentence
 
 
 
 
 
 
 
 
 
 
 
 
 
 
342
 
343
  def _compose_unknown_explanation(self, query: str) -> str:
344
  focus = self._unknown_focus_phrase(query)
345
  supports = self._unknown_known_supports(query)
346
  focus_text = focus or "that"
 
 
 
 
 
347
  if not supports:
348
+ return self._compose_query_limited_explanation(query, focus_text)
349
+ support_sentence = " ".join(self._sentence(item) for item in supports[:3])
350
+ query_kind = self._unknown_query_kind(query)
351
+ if query_kind == "where":
352
+ return f"{support_sentence} That is the grounded location path currently tied to {focus_text}."
353
+ if query_kind in {"who", "what"}:
354
+ return f"{support_sentence} That is the grounded identity path currently tied to {focus_text}."
355
+ if query_kind in {"why", "how"}:
356
+ return f"{support_sentence} That is the grounded reasoning path currently tied to {focus_text}."
357
+ return support_sentence
358
+
359
+ def _compose_query_limited_response(self, query: str, focus_text: str) -> str:
360
+ query_kind = self._unknown_query_kind(query)
361
+ if query_kind == "where":
362
+ return f"{focus_text} is not yet bound to a grounded place in Aethon's learned structure."
363
+ if query_kind == "who":
364
+ return f"{focus_text} is not yet bound to a grounded identity thread in Aethon's learned structure."
365
+ if query_kind == "what":
366
+ return f"{focus_text} is not yet bound to a grounded definition thread in Aethon's learned structure."
367
+ if query_kind in {"why", "how"}:
368
+ return f"Aethon does not yet carry a complete reasoning chain for {focus_text} in the current structure."
369
+ return f"The structure around {focus_text} is still open."
370
+
371
+ def _compose_query_limited_explanation(self, query: str, focus_text: str) -> str:
372
+ query_kind = self._unknown_query_kind(query)
373
+ if query_kind == "where":
374
+ return f"The question asks for a place, but {focus_text} is not yet connected to a grounded location in the current structure."
375
+ if query_kind == "who":
376
+ return f"The question asks for an identity, but {focus_text} is not yet connected to a grounded identity chain in the current structure."
377
+ if query_kind == "what":
378
+ return f"The question asks for a definition, but {focus_text} is not yet connected to a grounded definition chain in the current structure."
379
+ if query_kind in {"why", "how"}:
380
+ return f"The question asks for a reasoning chain, but {focus_text} is not yet connected to a complete grounded chain in the current structure."
381
+ return f"The current structure around {focus_text} is still incomplete."
382
 
383
  def _unknown_known_supports(self, query: str) -> list[str]:
384
  if self.graph is None:
 
466
  return None
467
  return " ".join(tokens[:3])
468
 
469
+ def _unknown_query_kind(self, query: str) -> str:
470
+ normalized = " ".join(query.lower().replace("?", " ").replace("!", " ").replace(".", " ").split())
471
+ if normalized.startswith("where "):
472
+ return "where"
473
+ if normalized.startswith("who "):
474
+ return "who"
475
+ if normalized.startswith("what "):
476
+ return "what"
477
+ if normalized.startswith("why "):
478
+ return "why"
479
+ if normalized.startswith("how "):
480
+ return "how"
481
+ return "open"
482
+
483
  def _abstract_proof_to_sentence(self, proof_line: str) -> str | None:
484
  if proof_line.startswith("abstract:"):
485
  parsed = self._parse_edge(proof_line)