File size: 6,575 Bytes
c97bd71
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
# Giant model β€” measured evaluation (v3.1.3, one interleaved pass)

All numbers below are from real runs of the committed binary and corpora
(deterministic; seed 77). Engine: SyFox 3.1.2 substrate + v3.1.3 CLI routing
fix. `energy-norm` ON everywhere (mandatory at corpus scale β€” v3.1.0).
Selection (calibration, router wording) used CAL only; hidden was scored
once. Per-row records: `datasets/eval/dump_pass1.jsonl`.

## Corpus

16 domains, 76,142 train rows (152,284 lessons per epoch), 278 globally
unique opaque anchors, 3 full per-script calibration files + 1 latin merge.
Recipe (the three failure-mode fixes): empty per-row instructions at learn;
globally-unique anchors; round-robin domain interleave. Criteria: preserved
verbatim for tickets/game/guard/bank77/sms (keys remapped to anchors),
mined top-10 for the 8 new HF domains (train rows only). See
`datasets/MANIFEST.json`.

## Hidden results β€” latin substrate (model-giant-latin, 43,420 nodes / 1,905,170 lanes)

| domain | n | router acc | class acc | end-to-end | deferred | ms/row |
|---|---:|---:|---:|---:|---:|---:|
| tickets_en | 1,800 | 0.831 | 0.904 | 0.761 | 0 | 7.65 |
| bank77 | 3,080 | 0.931 | 0.023 | 0.022 | 0 | 10.47 |
| sms | 838 | 0.233 | 0.752 | 0.222 | 2 | 6.42 |
| clinc | 4,500 | 0.334 | 0.309 | 0.123 | 0 | 11.02 |
| enron | 1,110 | 0.394 | 0.752 | 0.323 | 0 | 6.79 |
| emotion | 2,000 | 0.155 | 0.249 | 0.073 | 0 | 6.76 |
| hate | 1,500 | 0.381 | 0.653 | 0.277 | 0 | 6.52 |
| agnews | 2,000 | 0.320 | 0.604 | 0.206 | 0 | 7.02 |
| polarity | 2,000 | 0.339 | 0.571 | 0.189 | 0 | 6.52 |
| dbpedia | 2,000 | 0.403 | 0.475 | 0.204 | 0 | 7.55 |
| boolq | 1,500 | 0.097 | 0.531 | 0.059 | 0 | 6.18 |

Weighted over these 22,328 rows: router 0.432 Β· class 0.454 Β· e2e 0.196.

## Hidden results β€” multilingual substrates (post-isolation-fix)

| domain | substrate | n | router | class | e2e |
|---|---|---:|---:|---:|---:|
| tickets_bn | giant-bengali (579 nodes / 12,972 lanes) | 540 | 1.000 | 0.943 | 0.943 |
| tickets_hi | giant-devanagari (546 / 12,353) | 539 | 1.000 | 0.920 | 0.920 |
| tickets_ru | giant-cyrillic (680 / 14,915) | 539 | 1.000 | 0.959 | 0.959 |

Reference dedicated fabrics (v3.0, README): bn 0.969 / hi 0.965 / ru 0.970 β€”
the giant's per-script fabrics land within 1-4.5 points at a fraction of the
size, with the router trivially perfect inside a single-domain substrate.

## Handcrafted probes (41; 37 scored + 4 OOD)

Router 10/41 = 0.244 Β· class 11/37 = 0.297. OOD: the pure-gibberish probe
deferred (`zzqvv plork wumfus xanquu blorp`); the other three OOD probes
answered at confidence 0.000-0.031 (near-silence, honest). Full transcript
reproducible via `tools/giant_bench.py --probes`.

## Router-criteria wording sweep (cal only, never hidden)

| variant | router cal acc (n=3,250) |
|---|---:|
| short4 (trained wording) | **0.426** |
| mid8 specific | 0.164 |
| rich12 specific | 0.079 |
| long abstract | 0.208 |

Richer SPECIFIC wording makes the router worse β€” the direct-term harvest
mechanism of docs/PROBING.md: criteria words that occur in states harvest
energy regardless of router meaning, and more words = more cross-domain
harvest. Abstract register words recover part of the loss but do not beat
the short anchor-led probe. Winner (short4) matches what pass-1 trained.

## Probe-condition dependence (measured)

The router readout depends on what ELSE the decide call asks β€” every
question's criteria tokens inject into the same settled field:

| condition | router acc |
|---|---:|
| blind (router question alone), hidden n=23,528 | **0.400** |
| blind, cal n=1,500 | 0.399 |
| informed (router + the TRUE domain's class question β€” the hidden table above) | 0.432 weighted |
| router + ALL 15 class questions, cal | 0.399 |

Asking everything does NOT recover the informed condition: the other
domains' criteria dilute the anchoring (competitor dilution). Production
contract: a caller that only asks for routing gets the honest blind
estimate (0.400); the class numbers apply when the caller names the domain.

## Calibration (per-script, on cal only)

- giant-latin: choice temperature 0.1777; multiclass ECE 0.333 β†’ 0.230
  (choice), noul Platt (a=12.64, b=-1.00) ECE 0.511 β†’ 0.095.
- giant-bengali / -devanagari / -cyrillic: fitted on their own cal splits.

## Honest reading

1. **Class channels work where per-anchor data is thick**: tickets_en 0.904,
   sms 0.752, enron 0.752, hate 0.653, agnews 0.604, polarity 0.571 in a
   single shared fabric alongside 15 other domains.
2. **The single 16-way router is the e2e bottleneck** (0.10-0.40 on the new
   domains; wording sweep shows the limit is the mechanism, not the wording).
   e2e = router x class; when the caller names the domain (API use), use the
   class numbers. Blind routing alone measures 0.400 on hidden (see the
   probe-condition section).
3. **bank77's 77-way decision collapses in the shared fabric** (0.023 class
   vs 0.081 for the dedicated fabric): 77 anchors competing in a 43k-node
   multi-domain fabric is a harder readout than the dedicated fabric β€”
   hub crowding at scale, consistent with the v3.1.0 anatomy.
4. **boolq stays near majority** (0.531 vs ~0.62 True-majority): boolean
   passage comprehension is beyond bag-of-words SI readout β€” measured limit,
   not a bug.
5. **One interleaved pass, not three**: pass-1 lanes sit at their decay
   equilibrium because every domain is re-touched throughout the round-robin
   stream (the condition that made 3-epoch consolidation necessary β€”
   sequential training with lane decay 0.995/lesson β€” does not arise here).
   The chunked corpus (`data/giant/chunks/`) supports additional passes; the
   v3.1.0 ladder measured epochs 2-3 adding +0.008-0.012 on bank77 β€” run
   them if margins matter more than latency of training.

## Reproduce

```
make all                                  # build engine
python3 tools/hf_fetch.py                 # download HF datasets (cached)
python3 tools/giant_prepare.py            # build corpus + chunks + probes
for c in 0 1 ... 11:                      # one pass = 12 incremental learns
  ./build/syfox learn --examples data/giant/chunks/chunk_0$c.jsonl \
      --model model-giant --lang auto --epochs 1
./build/syfox calibrate --model model-giant-latin \
    --examples data/giant/cal_latin.jsonl --energy-norm   # (+ 3 scripts)
python3 tools/giant_bench.py --model-slug giant-latin --domains ... --dump out.jsonl
python3 tools/giant_bench.py --model-slug giant-latin --probes
python3 tools/router_sweep.py --model-slug giant-latin
```