maglun commited on
Commit
3f1f3aa
·
verified ·
1 Parent(s): d38ef59

v2: corrected generator, 10 000-episode checkpoint, changelog, Core ML packages

Browse files
README.md CHANGED
@@ -14,79 +14,110 @@ tags:
14
  - coreml
15
  - apple-silicon
16
  base_model: []
 
 
17
  ---
18
 
19
  # One-Pass SV-Forms (SV0) — a Swedish one-pass form specialist (research checkpoint)
20
 
21
  **This is a research checkpoint, not a product.** It is a 706 048-parameter model that scores a
22
- supplied list of options in **one forward pass** — the "Jev"/System One shape — trained on
23
- **synthetic** Swedish forms by a synthetic-data recipe we are publishing alongside it. It
24
- generates no text, needs no tokenizer, and runs in ~1 ms per decision on an Apple laptop or
25
- phone (Core ML package: 1.4 MB fp16, 787 KB int8).
26
 
27
  | | |
28
  | --- | --- |
29
- | Task | given a UI element (role, label, state) plus the entities extracted from a document, pick one option: `fyll <entity>` / `kryssa` / `klicka` / `hoppa över` |
30
  | Architecture | byte-level embeddings + 2-layer Transformer encoder (width 128, 4 heads) + option-attention head; `tinyx` |
31
- | Parameters | 706 048 (2.83 MB fp16 checkpoint) |
32
  | Context / option budget | 224 bytes of context, 96 bytes per option, **up to 40 options** |
33
- | Training data | 900 synthetic Swedish form episodes (21 306 decisions), generated locally; **no real form, person or customer data** |
34
  | Licence | MIT (weights and code) |
35
- | Lineage | independent implementation of the same contract as [Cua's CUA-S1](https://huggingface.co/cua-ai/cua-s1-forms) and [jevlike](https://github.com/vinnylarouge/jevlike); trained from scratch, not a fine-tune of either |
36
 
37
  ## Measured results (our harness, Apple M4)
38
 
39
  | Run | decisions | top-1 | majority-class baseline | ECE | silently skipped a required fill |
40
  | --- | ---: | ---: | ---: | ---: | ---: |
41
- | Held-out synthetic test (form-signature disjoint) | 2 315 | **83.02 %** | 50.45 % | 0.017 | **76 (7.5 % of fills)** |
42
- | Hand-written out-of-distribution Swedish demo | 50 | **86.00 %** | 64.00 % | 0.092 | 3 (of 32 fills) |
43
- | Shuffled-context control (test) | 2 315 | 34.08 % | 50.45 % | 0.497 | 264 |
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
44
 
45
- Per-action accuracy on the test split: `check` 98.3 %, `click` 93.7 %, `skip` 88.0 %,
46
- `fill` 75.5 %. The shuffled-context control is the interesting one: rotating contexts between
47
- rows drops the model below the majority baseline, i.e. it really reads the element label and the
48
- document rather than exploiting option statistics.
49
-
50
- For comparison, the released English checkpoint of the same family scores **21.4 %** on exactly
51
- these Swedish rows — below the majority baseline, at its own shuffled-control floor. The
52
- language was the barrier, not the contract.
53
 
54
- Core ML export (same checkpoint, converted with coremltools 9.0):
 
 
 
 
 
 
 
 
 
 
 
 
 
55
 
56
  | Variant | package | top-1 | argmax parity vs PyTorch | median latency | p95 |
57
  | --- | ---: | ---: | ---: | ---: | ---: |
58
- | fp16 (CPU + ANE) | 1.4 MB | 83.00 % | 0.99870 | 1.31 ms | 1.46 ms |
59
- | **int8 (CPU + ANE)** | **787 KB** | **83.09 %** | 0.99611 | 1.32 ms | 1.40 ms |
60
- | int4 (CPU + ANE) | 481 KB | 50.87 % | 0.48702 | 1.97 ms | 2.10 ms |
61
- | PyTorch reference | 2.83 MB | 83.02 % | — | — | — |
62
-
63
- We publish the int4 result because it is the most useful thing in this table: the same 4-bit
64
- palettisation costs 0.06 pp on a converged model and destroys this one, and it also fails ANE
65
- compilation. **Quantisation headroom is a property of the training run, not of the architecture.**
66
- Use int8. `int4-weights/` ships the collapsed variant for reproducibility only.
67
-
68
- ## What it is NOT
69
-
70
- - **Not trained or tested on real Swedish forms.** The corpus is synthetic (`Label: value`
71
- document entities, `.invalid` e-mail domains, fictional names, locally generated
72
- personnummer-shaped strings with no link to any real person) and the only non-synthetic
73
- evidence is a 50-decision set we wrote ourselves.
74
- - **Not a general-purpose assistant or an autonomous agent.** It does not generate text, cannot
75
- invent a value it was not given, and does not decide execution order.
76
- - **Not finished.** Validation was still improving when the run stopped (48 % → 63 % → 79 % →
77
- 83 % top-1 over four epochs), so treat 83 % as a floor for this recipe, not a ceiling.
78
- - **Not safe to run unsupervised on real data.** 7.5 % of required fills are answered "skip" —
79
- a required field that silently stays empty. Any real integration must verify outcomes outside
80
- the model (fail-closed execution, dry run, one submit, human review before consequential
81
- actions) — see the runtime contract in Cua's `planner.py` for a good pattern.
82
-
83
- ## Intended use
84
-
85
- Research on bounded, high-volume Swedish interface workflows where the option set is supplied by
86
- deterministic code: filling forms from an extracted document, triaging/routing where the choices
87
- are known in advance, or as a **criteria-decision** layer where a calibrated distribution per
88
- question is more useful than generated prose. Also as a worked example of how to build and
89
- measure a language-local one-pass specialist.
90
 
91
  ## Usage
92
 
@@ -94,27 +125,32 @@ measure a language-local one-pass specialist.
94
  from pathlib import Path
95
  from huggingface_hub import hf_hub_download
96
 
97
- # the checkpoint format is <name>.safetensors + <name>.json (architecture + hashes)
98
  weights = Path(hf_hub_download("precisit/one-pass-sv-forms", "sv0-forms.safetensors"))
99
  hf_hub_download("precisit/one-pass-sv-forms", "sv0-forms.json", local_dir=weights.parent)
100
- # then either use the Core ML packages (no Python runtime needed) or the PyTorch code in
101
- # the toolkit repository: https://github.com/precisit/one-pass-specialists — the Core ML
102
- # packages below live in *this* repository and need no PyTorch.
103
  ```
104
 
105
  The context string and options must be built exactly as in training (byte ids = UTF-8 byte + 1,
106
- zero-padded; `UPPGIFT fyll i formuläret från dokumentet och skicka sedan in` / `FORM <title>` /
107
- `ELEMENT <role> "<label>" value="…"`). A mismatch there is the most likely cause of poor output —
108
- the recipe and the generator are in the toolkit repository.
109
 
110
  ## Building your own
111
 
112
- The toolkit that produced this checkpoint is public: [`precisit/one-pass-specialists`](https://github.com/precisit/one-pass-specialists). The interesting work is the **catalogue** — the concepts, the labels they appear under, and their value formats — because everything above the trainer is language- and vertical-neutral. The recipe, the corpus manifest and both result files for this checkpoint are in that repository under `examples/sv-forms/`.
 
 
 
 
 
113
 
114
  ## Licence and attribution
115
 
116
- MIT. The architecture, training loop and evaluation metrics come from Cua's MIT-licensed
117
- `libs/cua-s1` (see `THIRD_PARTY_NOTICES.md`); the option-attention head design is credited there
118
- to `jevlike` (MIT). The Swedish catalogue, synthetic generator, training run, measurements and
119
- Core ML export are ours — **Precisit AB, 2026**. No TypeSafe AI code, weights or data was used;
120
- "Jev" is their product and this is an independent implementation of a similar interface.
 
 
14
  - coreml
15
  - apple-silicon
16
  base_model: []
17
+ datasets:
18
+ - precisit/one-pass-sv-forms-synthetic
19
  ---
20
 
21
  # One-Pass SV-Forms (SV0) — a Swedish one-pass form specialist (research checkpoint)
22
 
23
  **This is a research checkpoint, not a product.** It is a 706 048-parameter model that scores a
24
+ supplied list of options in **one forward pass** — the "Jev"/System One shape — trained from
25
+ scratch on **synthetic** Swedish forms. It generates no text, needs no tokenizer, and answers in
26
+ about a millisecond on an Apple device (Core ML: 1.4 MB fp16, 787 KB int8).
 
27
 
28
  | | |
29
  | --- | --- |
30
+ | Task | given a UI element (role, label, state) plus the entities extracted from a document, pick one option: `fyll <entitet>` / `kryssa` / `klicka` / `hoppa över` |
31
  | Architecture | byte-level embeddings + 2-layer Transformer encoder (width 128, 4 heads) + option-attention head; `tinyx` |
32
+ | Parameters | 706 048 |
33
  | Context / option budget | 224 bytes of context, 96 bytes per option, **up to 40 options** |
34
+ | Training data | 10 000 synthetic Swedish form episodes (234 921 decisions); **no real form, person or customer data** |
35
  | Licence | MIT (weights and code) |
36
+ | Lineage | independent implementation of the same interface as [Cua's CUA-S1](https://huggingface.co/cua-ai/cua-s1-forms) and [jevlike](https://github.com/vinnylarouge/jevlike); trained from scratch, not a fine-tune of either |
37
 
38
  ## Measured results (our harness, Apple M4)
39
 
40
  | Run | decisions | top-1 | majority-class baseline | ECE | silently skipped a required fill |
41
  | --- | ---: | ---: | ---: | ---: | ---: |
42
+ | Held-out synthetic test (form-signature disjoint) | 2 310 | **99.29 %** | 47.36 % | 0.0014 | **1** |
43
+ | Hand-written out-of-distribution demo | 50 | **100.00 %** | 64.00 % | — | 0 |
44
+ | Shuffled-context control (same test rows) | 2 310 | 31.99 % | 47.36 % | — | — |
45
+
46
+ The shuffled-context control is the number to look at first: rotating contexts between rows drops
47
+ the model to 31.99 %, well below the majority baseline, so it is reading the element label and the
48
+ document rather than exploiting option statistics. Without that control a 100 % demo set means
49
+ nothing.
50
+
51
+ For comparison, the released English checkpoint of the same family scores **21.4 %** on these
52
+ Swedish rows — below the majority baseline, at its own shuffled-control floor. The language was
53
+ the barrier, not the interface.
54
+
55
+ ### Data-size curve (same 4-epoch schedule, same seed, corrected generator)
56
+
57
+ | Episodes | Train decisions | Test top-1 | Silent skips | ECE | Training time (M4) |
58
+ | ---: | ---: | ---: | ---: | ---: | ---: |
59
+ | 900 | 21 305 | 77.10 % | 127 | 0.0216 | 32 min |
60
+ | 4 000 | 94 405 | 98.94 % | 6 | 0.0014 | 56 min |
61
+ | **10 000** | **234 921** | **99.29 %** | **1** | 0.0014 | 163 min |
62
+
63
+ This checkpoint is the 10 000-episode point. The curve is published because it is the useful
64
+ part: at 900 episodes the same pipeline sits at 77 %, so a single small run would have been
65
+ misread as a statement about the method rather than about the data.
66
+
67
+ ## Changelog
68
+
69
+ - **v2 (2026-09-21)** — this release. Two fixes and a scale-up, all three visible above:
70
+ 1. **Corpus correctness.** The Swedish catalogue's `personnummer` generator emitted nine digits
71
+ formatted `DDDDDDDD-DD` and `organisationsnummer` emitted `DDDDD-DDDDD`; both are now the
72
+ real Swedish shape `YYMMDD-XXXX`. As a side effect the models can no longer identify those
73
+ two concepts from the *shape of the value* alone — the bug had been an accidental
74
+ giveaway — so per-action accuracy on `fill` is the honest kind now.
75
+ 2. **Scale.** 900 → 10 000 episodes, which moved top-1 from 77 % to 99.29 % and silent skips
76
+ from 127 to 1.
77
+ 3. **Correction of our own first explanation.** An intermediate 900-episode run on the
78
+ corrected corpus scored 83.02 % (v1) versus 77.10 % (corrected), and we initially attributed
79
+ that six-point drop to the removed giveaway. The 4 000- and 10 000-episode points show the
80
+ dominant factor was data size, not corpus correctness. The measurement is recorded here
81
+ because we published the wrong explanation for part of a working day.
82
+ - **v1 (2026-09-21)** — first release: 900 synthetic episodes, 83.02 % top-1, 7.5 % silent skips,
83
+ 787 KB int8. Superseded; kept in the history of this repository rather than hidden.
84
 
85
+ ## What it is NOT
 
 
 
 
 
 
 
86
 
87
+ - **Not trained or tested on real Swedish forms.** The corpus is synthetic by construction:
88
+ fictional names, `.invalid` e-mail domains, generated personnummer-shaped identifiers that pass
89
+ their checksum but belong to nobody. The only non-synthetic evidence is a 50-decision set we
90
+ wrote ourselves. A small set built from two of our own shipped forms (Kanslist, Pratsam) is the
91
+ next measurement, not a claim in this card.
92
+ - **Not an agent.** It does not generate text, cannot invent a value it was not given, and does
93
+ not decide execution order — the option list and the sequence come from ordinary code around it.
94
+ - **Not safe unsupervised.** One required fill out of 29 839 was still answered "skip": a silent
95
+ failure. Any real integration must check outcomes outside the model (fail closed, dry run, one
96
+ submit, human review before consequential actions).
97
+ - **Not tuned for throughput.** One decision per `predict` call is what the latency numbers
98
+ describe; batching is untested.
99
+
100
+ ## Core ML export (same checkpoint, coremltools 9.0, Apple M4)
101
 
102
  | Variant | package | top-1 | argmax parity vs PyTorch | median latency | p95 |
103
  | --- | ---: | ---: | ---: | ---: | ---: |
104
+ | fp16, CPU + ANE | 1.44 MB | 99.29 % | 0.99950 (15 / 29 839) | 1.314 ms | 1.412 ms |
105
+ | fp16, CPU only | 1.44 MB | 99.28 % | — | 1.727 ms | 1.929 ms |
106
+ | **int8, CPU + ANE** | **787 KB** | **99.29 %** | 0.99956 (13 / 29 839) | 1.314 ms | 1.411 ms |
107
+ | int4, CPU + ANE | 481 KB | **49.92 %** | 0.49675 (15 015 / 29 839) | 1.984 ms | 2.115 ms |
108
+
109
+ **int8 is the variant to use; int4 does not work for this checkpoint** and the collapsed variant is
110
+ published as evidence rather than omitted. Two honest notes about it:
111
+
112
+ - On the *converged English* checkpoint of this family, the same 4-bit palettisation cost 14
113
+ decisions in 24 367. On both of ours it destroys the model (83 % → 51 % on v1, 99.29 % → 49.92 %
114
+ here) and the 4-bit graph does not compile for the Neural Engine (`ANECCompile() FAILED`).
115
+ Whatever the difference is, it is not training level: we first assumed quantisation headroom
116
+ tracked convergence, and the well-trained checkpoint falsifies that. We do not know the exact
117
+ quantisation recipe behind the English release, so we report the contradiction instead of
118
+ explaining it away.
119
+ - fp16 parity is 99.95 %, not 100 %, on 29 839 rows. Measure parity per checkpoint; do not inherit
120
+ someone else's 1.000000.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
121
 
122
  ## Usage
123
 
 
125
  from pathlib import Path
126
  from huggingface_hub import hf_hub_download
127
 
 
128
  weights = Path(hf_hub_download("precisit/one-pass-sv-forms", "sv0-forms.safetensors"))
129
  hf_hub_download("precisit/one-pass-sv-forms", "sv0-forms.json", local_dir=weights.parent)
130
+ # then either use the Core ML packages (no Python runtime needed, see example.py) or the PyTorch
131
+ # code and the full recipe in the toolkit repository:
132
+ # https://github.com/precisit/one-pass-specialists
133
  ```
134
 
135
  The context string and options must be built exactly as in training (byte ids = UTF-8 byte + 1,
136
+ zero padded; `UPPGIFT fyll i formuläret från dokumentet och skicka sedan in` / `FORM <titel>` /
137
+ `ELEMENT <roll> "<etikett>" value="…"`). A mismatch there is the most likely cause of poor output —
138
+ the generator, the catalogue and the scoring harness are in the toolkit repository.
139
 
140
  ## Building your own
141
 
142
+ [`precisit/one-pass-specialists`](https://github.com/precisit/one-pass-specialists) is the public
143
+ toolkit that produced this checkpoint: catalogue, synthetic generator with form-disjoint splits,
144
+ trainer, evaluation (including the shuffled-context control and the silent-skip count), Core ML
145
+ export with a bit-identity proof before anything is written, and the SV0 recipe with all receipts.
146
+ The synthetic corpus itself is published as
147
+ [`precisit/one-pass-sv-forms-synthetic`](https://huggingface.co/datasets/precisit/one-pass-sv-forms-synthetic).
148
 
149
  ## Licence and attribution
150
 
151
+ MIT. The architecture, training loop and evaluation metrics are vendored unmodified from Cua's
152
+ MIT-licensed [`libs/cua-s1`](https://github.com/trycua/cua/tree/main/libs/cua-s1) (which credits
153
+ `jevlike` for the option-attention head design). The Swedish catalogue, synthetic generator,
154
+ training runs, measurements and Core ML tooling are Precisit's. **No TypeSafe AI code, weights,
155
+ data or API output was used** — "Jev" and "System One" are their names for a similar interface, and
156
+ this is an independent implementation. See `THIRD_PARTY_NOTICES.md`.
coreml/conversion.json CHANGED
@@ -1,12 +1,12 @@
1
  {
2
- "checkpoint_sha256": "b9030d7a7b7abfaf70dd1cc2a390568eaa3a55849daa0757b60d01dbab162356",
3
- "created_utc": "2026-09-21T08:00:57Z",
4
  "limits": {
5
  "context_bytes": 224,
6
  "max_options": 40,
7
  "option_bytes": 96
8
  },
9
- "model": "sv0-forms (spike jev-sv0)",
10
  "model_config": {
11
  "context_tokens": 224,
12
  "encoder": "tinyx",
@@ -22,11 +22,17 @@
22
  "python": "3.12.14",
23
  "torch": "2.7.0"
24
  },
25
- "trace_check": null,
 
 
 
 
 
 
26
  "variants": {
27
  "fp16": {
28
  "minimum_target": "iOS17/macOS14",
29
- "path": "sv0_forms_fp16_options40.mlpackage",
30
  "precision": "float16"
31
  },
32
  "int4": {
@@ -34,14 +40,14 @@
34
  "group_size": 32,
35
  "minimum_target": "iOS18/macOS15",
36
  "mode": "KMEANS",
37
- "path": "sv0_forms_int4_options40.mlpackage",
38
  "precision": "int4_weights_float16_compute"
39
  },
40
  "int8": {
41
  "granularity": "per_tensor",
42
  "minimum_target": "iOS17/macOS14",
43
  "mode": "UNIFORM",
44
- "path": "sv0_forms_int8_options40.mlpackage",
45
  "precision": "int8_weights_float16_compute"
46
  }
47
  }
 
1
  {
2
+ "checkpoint_sha256": "4f35bfac96dd23c058dfc098986c3f4cff39b836a177fb60e026b5f06c2ba782",
3
+ "created_utc": "2026-09-21T18:30:58Z",
4
  "limits": {
5
  "context_bytes": 224,
6
  "max_options": 40,
7
  "option_bytes": 96
8
  },
9
+ "model": "one_pass_forms (one-pass specialist)",
10
  "model_config": {
11
  "context_tokens": 224,
12
  "encoder": "tinyx",
 
22
  "python": "3.12.14",
23
  "torch": "2.7.0"
24
  },
25
+ "trace_check": {
26
+ "logit_tolerance": 0.0001,
27
+ "trace_argmax_agreement": 1.0,
28
+ "trace_max_abs_logit_difference": 2.0742416381835938e-05,
29
+ "trace_max_abs_probability_difference": 1.0132789611816406e-06,
30
+ "verify_rows": 512
31
+ },
32
  "variants": {
33
  "fp16": {
34
  "minimum_target": "iOS17/macOS14",
35
+ "path": "one_pass_forms_fp16_options40.mlpackage",
36
  "precision": "float16"
37
  },
38
  "int4": {
 
40
  "group_size": 32,
41
  "minimum_target": "iOS18/macOS15",
42
  "mode": "KMEANS",
43
+ "path": "one_pass_forms_int4_options40.mlpackage",
44
  "precision": "int4_weights_float16_compute"
45
  },
46
  "int8": {
47
  "granularity": "per_tensor",
48
  "minimum_target": "iOS17/macOS14",
49
  "mode": "UNIFORM",
50
+ "path": "one_pass_forms_int8_options40.mlpackage",
51
  "precision": "int8_weights_float16_compute"
52
  }
53
  }
coreml/sv0_forms_fp16_options40.mlpackage/Data/com.apple.CoreML/model.mlmodel CHANGED
@@ -1,3 +1,3 @@
1
  version https://git-lfs.github.com/spec/v1
2
- oid sha256:bfe30d2473f7c9a0d804f7b3306f252fcad4a307fa9202d7bf218049be41401a
3
- size 58608
 
1
  version https://git-lfs.github.com/spec/v1
2
+ oid sha256:495202889ec32f7c0b0423d8b7c621ee9ccb502e00b3c3118d3f4a08a168d956
3
+ size 58601
coreml/sv0_forms_fp16_options40.mlpackage/Data/com.apple.CoreML/weights/weight.bin CHANGED
@@ -1,3 +1,3 @@
1
  version https://git-lfs.github.com/spec/v1
2
- oid sha256:cf1b0db68a002fd003cf68278f5e8c049c9360b9b5b3754205692e20a63bb43c
3
  size 1448256
 
1
  version https://git-lfs.github.com/spec/v1
2
+ oid sha256:aabd5c5ee30d9cb706cae1a4b49df4b8059cbad6f44e8be504d54eec547d8064
3
  size 1448256
coreml/sv0_forms_fp16_options40.mlpackage/Manifest.json CHANGED
@@ -1,18 +1,18 @@
1
  {
2
  "fileFormatVersion": "1.0.0",
3
  "itemInfoEntries": {
4
- "9B448D09-24D9-4E7E-B194-43D3D4AEE91F": {
5
- "author": "com.apple.CoreML",
6
- "description": "CoreML Model Specification",
7
- "name": "model.mlmodel",
8
- "path": "com.apple.CoreML/model.mlmodel"
9
- },
10
- "D3C625CB-29B6-456F-8FB3-B1111990E4E6": {
11
  "author": "com.apple.CoreML",
12
  "description": "CoreML Model Weights",
13
  "name": "weights",
14
  "path": "com.apple.CoreML/weights"
 
 
 
 
 
 
15
  }
16
  },
17
- "rootModelIdentifier": "9B448D09-24D9-4E7E-B194-43D3D4AEE91F"
18
  }
 
1
  {
2
  "fileFormatVersion": "1.0.0",
3
  "itemInfoEntries": {
4
+ "A03F5FFD-6BD4-420E-A7D8-A61BBF858DEF": {
 
 
 
 
 
 
5
  "author": "com.apple.CoreML",
6
  "description": "CoreML Model Weights",
7
  "name": "weights",
8
  "path": "com.apple.CoreML/weights"
9
+ },
10
+ "A5AD9673-5F84-42BF-89B0-E543BEEC1402": {
11
+ "author": "com.apple.CoreML",
12
+ "description": "CoreML Model Specification",
13
+ "name": "model.mlmodel",
14
+ "path": "com.apple.CoreML/model.mlmodel"
15
  }
16
  },
17
+ "rootModelIdentifier": "A5AD9673-5F84-42BF-89B0-E543BEEC1402"
18
  }
coreml/sv0_forms_int4_options40.mlpackage/Data/com.apple.CoreML/model.mlmodel CHANGED
@@ -1,3 +1,3 @@
1
  version https://git-lfs.github.com/spec/v1
2
- oid sha256:e145df71d2ee1a4566126487afd80cd6409aeda278d42494640f49dc17016168
3
- size 58303
 
1
  version https://git-lfs.github.com/spec/v1
2
+ oid sha256:7739d3302c68e6284a6d50542f01fb4a72b665f66c5f27f41afaf7859b2356a0
3
+ size 58296
coreml/sv0_forms_int4_options40.mlpackage/Data/com.apple.CoreML/weights/weight.bin CHANGED
@@ -1,3 +1,3 @@
1
  version https://git-lfs.github.com/spec/v1
2
- oid sha256:53d889e570414557693f59309731d573aa6ddee95746dc9b9735a63afa2ad9ec
3
  size 433664
 
1
  version https://git-lfs.github.com/spec/v1
2
+ oid sha256:d5530285655800fb5a12ea7698c8dd424c2c108de0985f9ba76a5f5ddbc969ed
3
  size 433664
coreml/sv0_forms_int4_options40.mlpackage/Manifest.json CHANGED
@@ -1,18 +1,18 @@
1
  {
2
  "fileFormatVersion": "1.0.0",
3
  "itemInfoEntries": {
4
- "495DA951-9B89-4CE4-8656-67B3D2E0038C": {
5
- "author": "com.apple.CoreML",
6
- "description": "CoreML Model Specification",
7
- "name": "model.mlmodel",
8
- "path": "com.apple.CoreML/model.mlmodel"
9
- },
10
- "7B688A87-1DA1-4178-9B4F-2F6A9FD6C274": {
11
  "author": "com.apple.CoreML",
12
  "description": "CoreML Model Weights",
13
  "name": "weights",
14
  "path": "com.apple.CoreML/weights"
 
 
 
 
 
 
15
  }
16
  },
17
- "rootModelIdentifier": "495DA951-9B89-4CE4-8656-67B3D2E0038C"
18
  }
 
1
  {
2
  "fileFormatVersion": "1.0.0",
3
  "itemInfoEntries": {
4
+ "87C06B3D-7FF4-41E3-AF3D-5E6344006172": {
 
 
 
 
 
 
5
  "author": "com.apple.CoreML",
6
  "description": "CoreML Model Weights",
7
  "name": "weights",
8
  "path": "com.apple.CoreML/weights"
9
+ },
10
+ "A57B64A4-F072-4A85-9FC2-C7734A8FF115": {
11
+ "author": "com.apple.CoreML",
12
+ "description": "CoreML Model Specification",
13
+ "name": "model.mlmodel",
14
+ "path": "com.apple.CoreML/model.mlmodel"
15
  }
16
  },
17
+ "rootModelIdentifier": "A57B64A4-F072-4A85-9FC2-C7734A8FF115"
18
  }
coreml/sv0_forms_int8_options40.mlpackage/Data/com.apple.CoreML/model.mlmodel CHANGED
@@ -1,3 +1,3 @@
1
  version https://git-lfs.github.com/spec/v1
2
- oid sha256:4c63811d8b278b206c03cfc40c7d311a1e91997e9f710d524a1372477a28be74
3
- size 62987
 
1
  version https://git-lfs.github.com/spec/v1
2
+ oid sha256:4090812ee4717e31f4cb6b40d74c68cf9c9a9f3b27530f62cda5e527fdf849e8
3
+ size 62980
coreml/sv0_forms_int8_options40.mlpackage/Data/com.apple.CoreML/weights/weight.bin CHANGED
@@ -1,3 +1,3 @@
1
  version https://git-lfs.github.com/spec/v1
2
- oid sha256:36c31c5e396138a45eb191fec6f637d3831ffaca6005ebed12b305979be6b732
3
  size 742528
 
1
  version https://git-lfs.github.com/spec/v1
2
+ oid sha256:ce77dcb8f8a241808fb0c112d923ba9e3524feb0334c3e610e59b8bcf3ea2981
3
  size 742528
coreml/sv0_forms_int8_options40.mlpackage/Manifest.json CHANGED
@@ -1,18 +1,18 @@
1
  {
2
  "fileFormatVersion": "1.0.0",
3
  "itemInfoEntries": {
4
- "BAE712EF-2551-49DE-BA14-3D8AB687D268": {
5
  "author": "com.apple.CoreML",
6
  "description": "CoreML Model Weights",
7
  "name": "weights",
8
  "path": "com.apple.CoreML/weights"
9
  },
10
- "E219151B-08B6-4AFD-BFEA-72D3F71825A6": {
11
  "author": "com.apple.CoreML",
12
  "description": "CoreML Model Specification",
13
  "name": "model.mlmodel",
14
  "path": "com.apple.CoreML/model.mlmodel"
15
  }
16
  },
17
- "rootModelIdentifier": "E219151B-08B6-4AFD-BFEA-72D3F71825A6"
18
  }
 
1
  {
2
  "fileFormatVersion": "1.0.0",
3
  "itemInfoEntries": {
4
+ "B757B5C4-7ED5-408A-BF9D-AC936B5068B1": {
5
  "author": "com.apple.CoreML",
6
  "description": "CoreML Model Weights",
7
  "name": "weights",
8
  "path": "com.apple.CoreML/weights"
9
  },
10
+ "E7FEE6B0-8F77-4EDD-81C4-21BCC5EB9583": {
11
  "author": "com.apple.CoreML",
12
  "description": "CoreML Model Specification",
13
  "name": "model.mlmodel",
14
  "path": "com.apple.CoreML/model.mlmodel"
15
  }
16
  },
17
+ "rootModelIdentifier": "E7FEE6B0-8F77-4EDD-81C4-21BCC5EB9583"
18
  }
eval/RESULTS-SV0-COREML.md DELETED
@@ -1,94 +0,0 @@
1
- # RESULTS-SV0-COREML — the Swedish SV0 specialist exported to Core ML
2
-
3
- **Verdict: PARTIAL — fp16 and int8 export cleanly and run on the Neural Engine at the same
4
- accuracy as PyTorch; int4 is _not_ usable for this checkpoint (83 % → 51 % top-1) and does not
5
- compile for the ANE.** Recommended deployment artifact: **int8, 787 KB, ~1.3 ms per decision.**
6
-
7
- ## What was exported
8
-
9
- `export_sv_coreml.py` in this directory converts `runs/sv-tinyx/model` (the SV0 checkpoint,
10
- 706 048 parameters) with coremltools 9.0, mirroring the fixed-shape contract of the
11
- FluidInference CUA-S1 release: `context_ids (1, 224)` / `option_ids (1, 40, 96)` /
12
- `option_mask (1, 40)`, all int32 byte-ids (byte + 1, 0 = pad), output `logits (1, 40)`.
13
- `max_options` is **40** here rather than their 32 because our corpus tops out at 37 options —
14
- the ceiling is baked into the export, so it must be sized from the widest real input.
15
-
16
- Variants: fp16 (iOS17), int8 (UNIFORM, per-tensor, iOS17), int4 (KMEANS, per-grouped-channel,
17
- group 32, iOS18). `conversion.json` records hashes, config and tooling versions.
18
-
19
- ## Export-time checks (all passed before any measurement)
20
-
21
- | Check | Result |
22
- | --- | --- |
23
- | Export forward vs vendored model, 256 real rows, max abs logit difference | **0.0** (bit-identical) |
24
- | Traced graph vs model, 64 real rows | max abs Δ 7.2 × 10⁻⁶, argmax agreement **1.0** |
25
-
26
- ## Measurements (Apple M4, macOS 26.6.2; 2 312 scored rows after 3 warm-up rows; same grader as the spike)
27
-
28
- | Variant | package | test top-1 | demo top-1 | silent skips (of 1 008 fills) | argmax parity vs PyTorch | mismatches | median | p95 |
29
- | --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: |
30
- | PyTorch (MPS), reference | 2 828 784 B | **83.02 %** | 86 % | 76 | — | — | — | — |
31
- | **fp16, CPU + ANE** | 1 507 481 B (1.44 MB) | 83.00 % | 85.11 % | 76 | 0.99870 | 3 / 2 312 | 1.307 ms | 1.460 ms |
32
- | fp16, CPU only | 1 507 481 B | 83.04 % | — | 76 | 0.99913 | 2 / 2 312 | 1.734 ms | 1.917 ms |
33
- | **int8, CPU + ANE** | **806 132 B (787 KB)** | **83.09 %** | 85.11 % | 76 | 0.99611 | 9 / 2 312 | 1.316 ms | 1.402 ms |
34
- | int4, CPU + ANE | 492 584 B (481 KB) | **50.87 %** | 27.66 % | 954 | 0.48702 | 1 186 / 2 312 | 1.968 ms | 2.099 ms |
35
-
36
- Fills per-action on fp16: `fill` 75.40 %, `skip` 88.26 %, `check` 96.55 %, `click` 93.67 % —
37
- within a few rows of the PyTorch run, i.e. the export is behaviour-preserving.
38
-
39
- ## What the numbers say
40
-
41
- 1. **The export works, and the ANE helps here too**: fp16 median 1.307 ms with the ANE vs
42
- 1.734 ms CPU-only, p95 1.460 ms vs 1.917 ms. Smaller absolute win than on the English model
43
- (whose weights are better conditioned), but the same direction.
44
- 2. **int8 is free and is the artifact to ship**: 787 KB (52 % of fp16), top-1 83.09 % — one
45
- decision *better* than PyTorch on this split — 9 argmax deviations out of 2 312, identical
46
- silent-skip count, and the same ANE behaviour.
47
- 3. **int4 does not transfer to an undertrained model.** On Cua's English checkpoint the same
48
- kind of palettisation cost 14 decisions in 24 367 (0.06 pp); here it costs 1 186 in 2 312
49
- (51 pp) and raises silent skips from 76 to 954. Two mechanisms are plausible and both point
50
- the same way: a model that has not converged stores information in fine weight differences
51
- that a 4-bit palette cannot represent, and the per-grouped-channel kmeans graph also fails
52
- to compile for the ANE (`ANECCompile() FAILED`, seen repeatedly during save and load), which
53
- is why its latency is worst despite being the smallest artifact. **Quantisation headroom is
54
- a property of the training run, not of the architecture** — that is the transferable finding.
55
- 4. **fp16 parity is 99.87 %, not 100 %**, and that is expected rather than alarming: three
56
- rows change their argmax under fp16 rounding on a model whose decision margins are thin
57
- (83 % top-1). On the well-trained English model the same conversion showed zero deviations.
58
- Parity must therefore be *measured* per checkpoint, not assumed — exactly what this harness
59
- does.
60
-
61
- ## Pitfalls found while exporting (all cost a failed run)
62
-
63
- - **`torch.jit.trace` under `torch.no_grad()` takes PyTorch's fused sparsity fast path**
64
- (`torch._transformer_encoder_layer_fwd`), which coremltools cannot convert. Trace with grad
65
- *enabled*.
66
- - **The coremltools torch frontend has no `__or__` for bool tensors** → use
67
- `torch.logical_or` / `torch.logical_not`. (`&`, `~` alone, and in-place `mask[:, 0] = True`
68
- all fail; probe the op support in a 5-line script before rewriting a model.)
69
- - **`clamp_min(1)` with a Python int trips `assert x.dtype == y.dtype`** in the frontend; pass a
70
- same-dtype tensor constant.
71
- - **`per_grouped_channel` palettisation requires an iOS18 deployment target**, so the int4
72
- variant needs its own fp16 base converted at iOS18 (the upstream release does the same).
73
- - **k-means palettisation needs `scikit-learn`**, which is not a coremltools dependency; the
74
- error arrives mid-run, after the fp16 conversion has already succeeded — hence the
75
- `REUSE_FP16=1` cache flag in the export script.
76
- - **Palettizer API in coremltools 9.0**: wrap the op config —
77
- `OptimizationConfig(global_config=OpPalettizerConfig(...))` — and note the mode names are
78
- upper-case (`UNIFORM`, `KMEANS`) while granularity is `per_tensor` / `per_grouped_channel`
79
- only.
80
- - **Check that the traced graph is the model** before converting: `torch.jit.trace(..., check_trace=False)`
81
- suppresses a noisy replay check, so the export script compares logits itself and aborts on
82
- mismatch.
83
-
84
- ## Reproduction
85
-
86
- ```bash
87
- # (in the spike venv with coremltools 9.0, torch 2.7, safetensors, scikit-learn)
88
- python check_export_forward.py # export forward is bit-identical to the model
89
- REUSE_FP16=1 python export_sv_coreml.py # fp16 + int8 + int4 mlpackages, conversion.json
90
- python eval_sv_coreml.py # accuracy, silent skips, parity, latency -> RESULTS-sv0-coreml.json
91
- ```
92
-
93
- Artifacts (not in Git): `sv-coreml/*.mlpackage`, `RESULTS-sv0-coreml.json`,
94
- `export.log`, `eval-coreml.log`.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
eval/RESULTS-SV0-pytorch.md DELETED
@@ -1,94 +0,0 @@
1
- # RESULTS-SV0 — Swedish Jev-shaped form specialist
2
-
3
- **Verdict: VALIDATED, with documented limits.**
4
- The Cua-S1 contract trains on our own Swedish synthetic data with the upstream MIT code,
5
- on one laptop, and reaches **83.02 %** top-1 on a held-out, form-disjoint synthetic test
6
- (2 315 decisions) and **86 %** on a hand-written out-of-distribution Swedish demo (50
7
- decisions) — against **21.4 %** / **20 %** for the released English `cua-s1-forms`
8
- checkpoint on the very same rows. The result is undertrained (validation was still
9
- improving at the last epoch), so 83 % is a floor, not a ceiling.
10
-
11
- ## Protocol as run
12
-
13
- | Item | Setting |
14
- | --- | --- |
15
- | Architecture | `tinyx` (byte-level 2-layer Transformer encoder, width 128, 4 heads) + jevlike `AttentionHead`, context 224 / option 96 bytes — identical to upstream |
16
- | Code | `trycua/cua` → `libs/cua-s1` @ `9bbfa7d`, vendored unmodified (`vendor/`, MIT) |
17
- | Corpus | `sv_synth.py` + `concepts_sv.py` (ours): 900 episodes, seed 2026, splits by form field signature |
18
- | Rows | train 21 306 / validation 2 855 / test 2 315 decisions; 725 / 96 / 79 distinct form signatures, **zero overlap** between splits |
19
- | Training | AdamW lr 2e-3, cosine + 5 % warmup, wd 1e-2, 4 epochs, batch 64, seed 7, MPS, 1 927 s |
20
- | Checkpoint rule | best validation NLL (upstream's rule) — epoch 4 |
21
- | Grader | `eval_sv.py`, unchanged for both checkpoints |
22
-
23
- ## Numbers
24
-
25
- | Run | decisions | top-1 | majority baseline | ECE | skipped a required fill | per action |
26
- | --- | ---: | ---: | ---: | ---: | ---: | --- |
27
- | Swedish specialist — synthetic test (form-disjoint) | 2 315 | **83.02 %** | 50.45 % | 0.01656 | 76 | `check` 98.28 % (n=58), `click` 93.67 % (n=79), `fill` 75.55 % (n=1010), `skip` 88.01 % (n=1168) |
28
- | Swedish specialist — handwritten OOD demo (50) | 50 | **86.00 %** | 64.00 % | 0.09176 | 3 | `check` 100 % (n=3), `click` 100 % (n=3), `fill` 81.25 % (n=32), `skip` 91.67 % (n=12) |
29
- | Swedish specialist — shuffled-context control (test) | 2 315 | 34.08 % | 50.45 % | 0.49735 | 264 | `check` 15.52 %, `click` 0 %, `fill` 1.29 %, `skip` 65.67 % |
30
- | Swedish specialist — shuffled-context control (demo) | 50 | 6.00 % | 64.00 % | 0.78579 | 6 | all actions ≤ 25 % |
31
- | English reference (`cua-s1-forms`) — synthetic test | 2 315 | 21.38 % | 50.45 % | 0.64072 | 371 | `check` 93.10 %, `click` 26.58 %, `fill` 5.54 %, `skip` 31.16 % |
32
- | English reference — handwritten OOD demo | 50 | 20.00 % | 64.00 % | 0.66098 | 16 | `check` 66.67 %, `click` 33.33 %, `fill` 15.62 %, `skip` 16.67 % |
33
- | English reference — shuffled-context control (test) | 2 315 | 17.50 % | 50.45 % | 0.67954 | 363 | `check` 60.35 %, `click` 6.33 %, `fill` 1.78 %, `skip` 29.71 % |
34
-
35
- Per-epoch validation: 48.23 % → 62.98 % → 78.63 % → **83.01 %** top-1 (train NLL
36
- 2.06 → 0.45; val NLL 1.75 → 0.52). Still improving when the run stopped.
37
-
38
- ## Reading the numbers
39
-
40
- 1. **The contract transfers; the language boundary was the real barrier.** The English
41
- checkpoint on Swedish rows sits at **21.4 %**, barely above its own shuffled-context
42
- control (17.5 %) and *below* the majority-action baseline (50.5 %), with ECE 0.64 — it
43
- is not reading the content, it is guessing confidently. On the hand-written demo it
44
- scores 20 % against a 64 % baseline, i.e. worse than always answering "fill". The
45
- Swedish specialist, same architecture, same grader, same rows: 83 % / 86 %.
46
- 2. **The shuffled control is the floor that matters.** Our specialist drops from 83.02 %
47
- to 34.08 % when contexts are rotated between rows (below the 50.45 % majority
48
- baseline), which is the evidence that it uses the element label and the document, not
49
- option statistics. The English reference barely moves (21.4 % → 17.5 %) — its score was
50
- near the floor to begin with.
51
- 3. **`fill` is the weak action, and the silent-skip failure mode persists.** 75.5 % of
52
- fills are right; 76 of 1 010 fill decisions (7.5 %) are answered `hoppa över` instead.
53
- In a real workflow that is the dangerous class: a required field that looks done and is
54
- not. It is much smaller than the English reference's (371/1 010), but it is not zero,
55
- and it is the reason a production integration needs a per-item check outside the model.
56
- 4. **Calibration is good in-distribution and degrades out-of-distribution** (ECE 0.017 →
57
- 0.092), which is exactly the wrong direction for confidence routing if the threshold is
58
- tuned on synthetic data.
59
- 5. **It is undertrained.** Both the validation curve and the comparison with the reference
60
- (trained on ~150 k rows vs our 21 k) say the remaining error is largely a data-scale
61
- effect. The next honest step is more episodes, not a different architecture.
62
-
63
- ## What this does not establish
64
-
65
- - Nothing about real Swedish forms. The demo set is hand-written by the same person who
66
- wrote the catalogue, so it shares the author's vocabulary; a genuine test needs real
67
- blanketter (Skolverket/Försäkringskassan/kommunala) or our own live forms.
68
- - Nothing about the runtime: this spike scores decisions, it does not drive a GUI.
69
- Fill/click execution, retries and fail-closed behaviour were not exercised (upstream's
70
- `planner.py` refuses to execute without a compatible driver contract).
71
- - Nothing about English transfer in the other direction: we never trained a Swedish model
72
- on English rows, and the corpus changes *language and label vocabulary at once*, so the
73
- ablation "language vs vocabulary" is still open.
74
- - Reproducibility is bounded by the environment: torch 2.14 on Apple Silicon MPS, seed 7,
75
- `deterministic=False` (deterministic algorithms were too slow on MPS), so the exact
76
- numbers are one draw, not a bit-reproducible receipt.
77
-
78
- ## Follow-ups worth pre-registering
79
-
80
- 1. **Scale test**: 4 000–10 000 episodes, 6 epochs, batch 32–64 on a machine with room —
81
- does top-1 cross ~95 % and does the silent-skip rate fall below 2 % of fills?
82
- 2. **Language ✕ vocabulary ablation**: Swedish documents + English labels, and the mirror,
83
- to attribute the win.
84
- 3. **Real-form OOD**: hand-build 3–5 authentic Swedish blanketter (never in the catalogue)
85
- and score before touching the corpus again.
86
- 4. **Abstention outside the model**: a spread/top-probability gate plus a "required field
87
- still empty" check, measured on the silent-skip class specifically.
88
-
89
- ## Reproduction
90
-
91
- See `README.md` in this directory. Runtime: ~5 min generation, 32 min training, seconds of
92
- scoring on one Apple Silicon laptop. Corpus and checkpoint are not in Git
93
- (`~/agent-data/jevlike-sv-spike/`); `data/sv/manifest.json` carries the SHA-256 of each split
94
- (test `92c0dfec…d272`).
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
eval/RESULTS-SV0-v2.md ADDED
@@ -0,0 +1,57 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # RESULTS-SV0 v2 — the released Swedish one-pass specialist
2
+
3
+ Raw artefacts: `results-pytorch.json`, `results-coreml.json`, `size-sweep.jsonl`,
4
+ `corpus-manifest-10000-episodes.json`. Model card:
5
+ [`precisit/one-pass-sv-forms`](https://huggingface.co/precisit/one-pass-sv-forms).
6
+
7
+ ## The checkpoint
8
+
9
+ - 706 048 parameters (`tinyx`), 2.83 MB fp16, trained from scratch.
10
+ - Corpus: 10 000 synthetic episodes, seed 2026, split by form signature → 234 921 train /
11
+ 29 649 validation / 29 839 test decisions.
12
+ - Schedule: 4 epochs, batch 64, learning rate 2e-3, seed 7; 163 minutes on an Apple M4 (24 GB).
13
+
14
+ ## Held-out results (the corpus's own test split, and the hand-written set)
15
+
16
+ | Run | decisions | top-1 | majority-class baseline | ECE | silent skips |
17
+ | --- | ---: | ---: | ---: | ---: | ---: |
18
+ | Synthetic test (form-disjoint) | 29 839 | 99.29 % | 47.36 % | 0.0014 | 1 |
19
+ | Hand-written out-of-distribution demo | 50 | 100.00 % | 64.00 % | — | 0 |
20
+ | Shuffled-context control | 29 839 | 31.99 % | 47.36 % | — | — |
21
+ | The *earlier* checkpoint on Swedish rows: released English model of the same family | 2 310 | 21.4 % | 48.87 % | — | 371 of 1 044 fills |
22
+
23
+ The shuffled control (31.99 %, below the 47.36 % majority baseline) is the load-bearing control:
24
+ it shows the score comes from reading the element and the document rather than from the option
25
+ statistics. Silent skips fell from 127 (900 episodes) to 1.
26
+
27
+ ## Data-size curve (fixed 4-epoch schedule, fixed seed, corrected generator)
28
+
29
+ | Episodes | Train decisions | Test decisions | top-1 | silent skips | ECE | training time |
30
+ | ---: | ---: | ---: | ---: | ---: | ---: | ---: |
31
+ | 900 | 21 305 | 2 310 | 77.10 % | 127 | 0.0216 | 32 min |
32
+ | 4 000 | 94 405 | 11 556 | 98.94 % | 6 | 0.0014 | 56 min |
33
+ | 10 000 | 234 921 | 29 839 | 99.29 % | 1 | 0.0014 | 163 min |
34
+
35
+ Each point is scored on its own corpus's held-out split, so the test set grows with the corpus.
36
+
37
+ ## What changed from v1, and what we got wrong
38
+
39
+ 1. **A format bug in the generator, fixed.** `gen_personnummer` produced nine digits formatted
40
+ `DDDDDDDD-DD` and `gen_orgnummer` appended the check digit, producing eleven characters. Both
41
+ now emit the real Swedish shape (`YYMMDD-XXXX`, 6+4, Luhn-valid). Tests assert the shape and the
42
+ checksum.
43
+ 2. **An accidental giveaway, removed.** The buggy shapes happened to be unique among the 50
44
+ concepts, so those two concepts could be identified from the *shape of the value* alone. After
45
+ the fix both share `DDDDDD-DDDD` with each other only. Per-action `fill` accuracy is therefore
46
+ the honest kind now (`shape_analysis` in the working notes; the shape census is ten lines).
47
+ 3. **A wrong explanation, corrected.** The first 900-episode run on the corrected corpus scored
48
+ 77.10 % against 83.02 % for the buggy-corpus run, and we attributed the six-point drop to the
49
+ removed giveaway. The 4 000- and 10 000-episode points show the dominant factor was data size.
50
+ The claim was wrong for part of a working day and is recorded here rather than quietly dropped.
51
+
52
+ ## Limits
53
+
54
+ - Synthetic corpus only: form-disjoint held-out splits, not distribution-disjoint ones. No real
55
+ Swedish form has been through the model; the 50-decision set is the only non-generated evidence.
56
+ - One silent skip remains: out-of-model verification is still mandatory.
57
+ - Latency figures are single-decision calls; batching untested.
eval/corpus-manifest-10000-episodes.json ADDED
@@ -0,0 +1,44 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "episodes": 10000,
3
+ "format": "cua-s1-choice-jsonl",
4
+ "format_version": 1,
5
+ "generator": {
6
+ "config": {
7
+ "filled_field_probability": 0.6,
8
+ "hard_negative_probability": 0.35,
9
+ "max_distractor_entities": 3,
10
+ "max_extra_entities": 5,
11
+ "missing_entity_probability": 0.12,
12
+ "partial_form_probability": 0.3,
13
+ "stale_value_probability": 0.05
14
+ },
15
+ "format": "spike.sv_synth",
16
+ "task_line": "UPPGIFT fyll i formul\u00e4ret fr\u00e5n dokumentet och skicka sedan in"
17
+ },
18
+ "ratios": {
19
+ "test": 0.1,
20
+ "train": 0.8,
21
+ "validation": 0.1
22
+ },
23
+ "seed": 2026,
24
+ "splits": {
25
+ "test": {
26
+ "episodes": 1009,
27
+ "file": "test.jsonl",
28
+ "rows": 29839,
29
+ "sha256": "105b7c0509af8667c11653f77d3866dc528e846a3f439e284dccb62164d2dc3f"
30
+ },
31
+ "train": {
32
+ "episodes": 7984,
33
+ "file": "train.jsonl",
34
+ "rows": 234921,
35
+ "sha256": "071edb46d1a5f03a4b85e4ca5adfc2a089b31b334c85c3446e0f75d378dae731"
36
+ },
37
+ "validation": {
38
+ "episodes": 1007,
39
+ "file": "validation.jsonl",
40
+ "rows": 29649,
41
+ "sha256": "e58cf782a94deb6532675bc0de202819c75f8f347912dfddf9337dd4a0992baa"
42
+ }
43
+ }
44
+ }
eval/demo-handwritten.jsonl ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {"context":"UPPGIFT fyll i formuläret från dokumentet och skicka sedan in\nFORM Exempelkliniken - Ny patientregistrering\nELEMENT Edit \"Förnamn\" value=\"\"","label":0,"meta":{"action":"fill","form":"Exempelkliniken - Ny patientregistrering","gold_option":"fyll Förnamn: Anna","role":"Edit","source":"hand-authored"},"options":["fyll Förnamn: Anna","fyll Efternamn: Lindqvist","fyll Personnummer: 560314-2381","fyll Telefon: 070-341 22 87","fyll E-post: anna.lindqvist@exempel.invalid","fyll Gatuadress: Kungsgatan 42","fyll Postnummer: 753 20","fyll Ort: Uppsala","fyll Vårdcentral: Exempelvårdcentralen","fyll Allergier: Penicillin","fyll Anhörig: Erik Lindqvist","fyll Anhörigs telefon: 070-882 19 03","fyll Kursnamn: Anatomi och fysiologi","fyll Bankgiro: 552-7731","fyll Fakturadatum: 2026-09-14","kryssa","klicka","hoppa över"]}
2
+ {"context":"UPPGIFT fyll i formuläret från dokumentet och skicka sedan in\nFORM Exempelkliniken - Ny patientregistrering\nELEMENT Edit \"Efternamn\" value=\"\"","label":1,"meta":{"action":"fill","form":"Exempelkliniken - Ny patientregistrering","gold_option":"fyll Efternamn: Lindqvist","role":"Edit","source":"hand-authored"},"options":["fyll Förnamn: Anna","fyll Efternamn: Lindqvist","fyll Personnummer: 560314-2381","fyll Telefon: 070-341 22 87","fyll E-post: anna.lindqvist@exempel.invalid","fyll Gatuadress: Kungsgatan 42","fyll Postnummer: 753 20","fyll Ort: Uppsala","fyll Vårdcentral: Exempelvårdcentralen","fyll Allergier: Penicillin","fyll Anhörig: Erik Lindqvist","fyll Anhörigs telefon: 070-882 19 03","fyll Kursnamn: Anatomi och fysiologi","fyll Bankgiro: 552-7731","fyll Fakturadatum: 2026-09-14","kryssa","klicka","hoppa över"]}
3
+ {"context":"UPPGIFT fyll i formuläret från dokumentet och skicka sedan in\nFORM Exempelkliniken - Ny patientregistrering\nELEMENT Edit \"Personnummer\" value=\"\" hint=\"ÅÅMMDD-XXXX\"","label":2,"meta":{"action":"fill","form":"Exempelkliniken - Ny patientregistrering","gold_option":"fyll Personnummer: 560314-2381","role":"Edit","source":"hand-authored"},"options":["fyll Förnamn: Anna","fyll Efternamn: Lindqvist","fyll Personnummer: 560314-2381","fyll Telefon: 070-341 22 87","fyll E-post: anna.lindqvist@exempel.invalid","fyll Gatuadress: Kungsgatan 42","fyll Postnummer: 753 20","fyll Ort: Uppsala","fyll Vårdcentral: Exempelvårdcentralen","fyll Allergier: Penicillin","fyll Anhörig: Erik Lindqvist","fyll Anhörigs telefon: 070-882 19 03","fyll Kursnamn: Anatomi och fysiologi","fyll Bankgiro: 552-7731","fyll Fakturadatum: 2026-09-14","kryssa","klicka","hoppa över"]}
4
+ {"context":"UPPGIFT fyll i formuläret från dokumentet och skicka sedan in\nFORM Exempelkliniken - Ny patientregistrering\nELEMENT Edit \"Mobilnummer\" value=\"\"","label":3,"meta":{"action":"fill","form":"Exempelkliniken - Ny patientregistrering","gold_option":"fyll Telefon: 070-341 22 87","role":"Edit","source":"hand-authored"},"options":["fyll Förnamn: Anna","fyll Efternamn: Lindqvist","fyll Personnummer: 560314-2381","fyll Telefon: 070-341 22 87","fyll E-post: anna.lindqvist@exempel.invalid","fyll Gatuadress: Kungsgatan 42","fyll Postnummer: 753 20","fyll Ort: Uppsala","fyll Vårdcentral: Exempelvårdcentralen","fyll Allergier: Penicillin","fyll Anhörig: Erik Lindqvist","fyll Anhörigs telefon: 070-882 19 03","fyll Kursnamn: Anatomi och fysiologi","fyll Bankgiro: 552-7731","fyll Fakturadatum: 2026-09-14","kryssa","klicka","hoppa över"]}
5
+ {"context":"UPPGIFT fyll i formuläret från dokumentet och skicka sedan in\nFORM Exempelkliniken - Ny patientregistrering\nELEMENT Edit \"E-post\" value=\"\"","label":4,"meta":{"action":"fill","form":"Exempelkliniken - Ny patientregistrering","gold_option":"fyll E-post: anna.lindqvist@exempel.invalid","role":"Edit","source":"hand-authored"},"options":["fyll Förnamn: Anna","fyll Efternamn: Lindqvist","fyll Personnummer: 560314-2381","fyll Telefon: 070-341 22 87","fyll E-post: anna.lindqvist@exempel.invalid","fyll Gatuadress: Kungsgatan 42","fyll Postnummer: 753 20","fyll Ort: Uppsala","fyll Vårdcentral: Exempelvårdcentralen","fyll Allergier: Penicillin","fyll Anhörig: Erik Lindqvist","fyll Anhörigs telefon: 070-882 19 03","fyll Kursnamn: Anatomi och fysiologi","fyll Bankgiro: 552-7731","fyll Fakturadatum: 2026-09-14","kryssa","klicka","hoppa över"]}
6
+ {"context":"UPPGIFT fyll i formuläret från dokumentet och skicka sedan in\nFORM Exempelkliniken - Ny patientregistrering\nELEMENT Edit \"Adress\" value=\"\"","label":5,"meta":{"action":"fill","form":"Exempelkliniken - Ny patientregistrering","gold_option":"fyll Gatuadress: Kungsgatan 42","role":"Edit","source":"hand-authored"},"options":["fyll Förnamn: Anna","fyll Efternamn: Lindqvist","fyll Personnummer: 560314-2381","fyll Telefon: 070-341 22 87","fyll E-post: anna.lindqvist@exempel.invalid","fyll Gatuadress: Kungsgatan 42","fyll Postnummer: 753 20","fyll Ort: Uppsala","fyll Vårdcentral: Exempelvårdcentralen","fyll Allergier: Penicillin","fyll Anhörig: Erik Lindqvist","fyll Anhörigs telefon: 070-882 19 03","fyll Kursnamn: Anatomi och fysiologi","fyll Bankgiro: 552-7731","fyll Fakturadatum: 2026-09-14","kryssa","klicka","hoppa över"]}
7
+ {"context":"UPPGIFT fyll i formuläret från dokumentet och skicka sedan in\nFORM Exempelkliniken - Ny patientregistrering\nELEMENT Edit \"Postnummer\" value=\"\"","label":6,"meta":{"action":"fill","form":"Exempelkliniken - Ny patientregistrering","gold_option":"fyll Postnummer: 753 20","role":"Edit","source":"hand-authored"},"options":["fyll Förnamn: Anna","fyll Efternamn: Lindqvist","fyll Personnummer: 560314-2381","fyll Telefon: 070-341 22 87","fyll E-post: anna.lindqvist@exempel.invalid","fyll Gatuadress: Kungsgatan 42","fyll Postnummer: 753 20","fyll Ort: Uppsala","fyll Vårdcentral: Exempelvårdcentralen","fyll Allergier: Penicillin","fyll Anhörig: Erik Lindqvist","fyll Anhörigs telefon: 070-882 19 03","fyll Kursnamn: Anatomi och fysiologi","fyll Bankgiro: 552-7731","fyll Fakturadatum: 2026-09-14","kryssa","klicka","hoppa över"]}
8
+ {"context":"UPPGIFT fyll i formuläret från dokumentet och skicka sedan in\nFORM Exempelkliniken - Ny patientregistrering\nELEMENT Edit \"Ort\" value=\"\"","label":7,"meta":{"action":"fill","form":"Exempelkliniken - Ny patientregistrering","gold_option":"fyll Ort: Uppsala","role":"Edit","source":"hand-authored"},"options":["fyll Förnamn: Anna","fyll Efternamn: Lindqvist","fyll Personnummer: 560314-2381","fyll Telefon: 070-341 22 87","fyll E-post: anna.lindqvist@exempel.invalid","fyll Gatuadress: Kungsgatan 42","fyll Postnummer: 753 20","fyll Ort: Uppsala","fyll Vårdcentral: Exempelvårdcentralen","fyll Allergier: Penicillin","fyll Anhörig: Erik Lindqvist","fyll Anhörigs telefon: 070-882 19 03","fyll Kursnamn: Anatomi och fysiologi","fyll Bankgiro: 552-7731","fyll Fakturadatum: 2026-09-14","kryssa","klicka","hoppa över"]}
9
+ {"context":"UPPGIFT fyll i formuläret från dokumentet och skicka sedan in\nFORM Exempelkliniken - Ny patientregistrering\nELEMENT Edit \"Vårdcentral\" value=\"\"","label":8,"meta":{"action":"fill","form":"Exempelkliniken - Ny patientregistrering","gold_option":"fyll Vårdcentral: Exempelvårdcentralen","role":"Edit","source":"hand-authored"},"options":["fyll Förnamn: Anna","fyll Efternamn: Lindqvist","fyll Personnummer: 560314-2381","fyll Telefon: 070-341 22 87","fyll E-post: anna.lindqvist@exempel.invalid","fyll Gatuadress: Kungsgatan 42","fyll Postnummer: 753 20","fyll Ort: Uppsala","fyll Vårdcentral: Exempelvårdcentralen","fyll Allergier: Penicillin","fyll Anhörig: Erik Lindqvist","fyll Anhörigs telefon: 070-882 19 03","fyll Kursnamn: Anatomi och fysiologi","fyll Bankgiro: 552-7731","fyll Fakturadatum: 2026-09-14","kryssa","klicka","hoppa över"]}
10
+ {"context":"UPPGIFT fyll i formuläret från dokumentet och skicka sedan in\nFORM Exempelkliniken - Ny patientregistrering\nELEMENT Edit \"Kända allergier\" value=\"\"","label":9,"meta":{"action":"fill","form":"Exempelkliniken - Ny patientregistrering","gold_option":"fyll Allergier: Penicillin","role":"Edit","source":"hand-authored"},"options":["fyll Förnamn: Anna","fyll Efternamn: Lindqvist","fyll Personnummer: 560314-2381","fyll Telefon: 070-341 22 87","fyll E-post: anna.lindqvist@exempel.invalid","fyll Gatuadress: Kungsgatan 42","fyll Postnummer: 753 20","fyll Ort: Uppsala","fyll Vårdcentral: Exempelvårdcentralen","fyll Allergier: Penicillin","fyll Anhörig: Erik Lindqvist","fyll Anhörigs telefon: 070-882 19 03","fyll Kursnamn: Anatomi och fysiologi","fyll Bankgiro: 552-7731","fyll Fakturadatum: 2026-09-14","kryssa","klicka","hoppa över"]}
11
+ {"context":"UPPGIFT fyll i formuläret från dokumentet och skicka sedan in\nFORM Exempelkliniken - Ny patientregistrering\nELEMENT Edit \"Anhörig\" value=\"\"","label":10,"meta":{"action":"fill","form":"Exempelkliniken - Ny patientregistrering","gold_option":"fyll Anhörig: Erik Lindqvist","role":"Edit","source":"hand-authored"},"options":["fyll Förnamn: Anna","fyll Efternamn: Lindqvist","fyll Personnummer: 560314-2381","fyll Telefon: 070-341 22 87","fyll E-post: anna.lindqvist@exempel.invalid","fyll Gatuadress: Kungsgatan 42","fyll Postnummer: 753 20","fyll Ort: Uppsala","fyll Vårdcentral: Exempelvårdcentralen","fyll Allergier: Penicillin","fyll Anhörig: Erik Lindqvist","fyll Anhörigs telefon: 070-882 19 03","fyll Kursnamn: Anatomi och fysiologi","fyll Bankgiro: 552-7731","fyll Fakturadatum: 2026-09-14","kryssa","klicka","hoppa över"]}
12
+ {"context":"UPPGIFT fyll i formuläret från dokumentet och skicka sedan in\nFORM Exempelkliniken - Ny patientregistrering\nELEMENT Edit \"Nödkontakt telefon\" value=\"\"","label":11,"meta":{"action":"fill","form":"Exempelkliniken - Ny patientregistrering","gold_option":"fyll Anhörigs telefon: 070-882 19 03","role":"Edit","source":"hand-authored"},"options":["fyll Förnamn: Anna","fyll Efternamn: Lindqvist","fyll Personnummer: 560314-2381","fyll Telefon: 070-341 22 87","fyll E-post: anna.lindqvist@exempel.invalid","fyll Gatuadress: Kungsgatan 42","fyll Postnummer: 753 20","fyll Ort: Uppsala","fyll Vårdcentral: Exempelvårdcentralen","fyll Allergier: Penicillin","fyll Anhörig: Erik Lindqvist","fyll Anhörigs telefon: 070-882 19 03","fyll Kursnamn: Anatomi och fysiologi","fyll Bankgiro: 552-7731","fyll Fakturadatum: 2026-09-14","kryssa","klicka","hoppa över"]}
13
+ {"context":"UPPGIFT fyll i formuläret från dokumentet och skicka sedan in\nFORM Exempelkliniken - Ny patientregistrering\nELEMENT Edit \"Ort\" value=\"Uppsala\"","label":17,"meta":{"action":"skip","form":"Exempelkliniken - Ny patientregistrering","gold_option":"hoppa över","role":"Edit","source":"hand-authored"},"options":["fyll Förnamn: Anna","fyll Efternamn: Lindqvist","fyll Personnummer: 560314-2381","fyll Telefon: 070-341 22 87","fyll E-post: anna.lindqvist@exempel.invalid","fyll Gatuadress: Kungsgatan 42","fyll Postnummer: 753 20","fyll Ort: Uppsala","fyll Vårdcentral: Exempelvårdcentralen","fyll Allergier: Penicillin","fyll Anhörig: Erik Lindqvist","fyll Anhörigs telefon: 070-882 19 03","fyll Kursnamn: Anatomi och fysiologi","fyll Bankgiro: 552-7731","fyll Fakturadatum: 2026-09-14","kryssa","klicka","hoppa över"]}
14
+ {"context":"UPPGIFT fyll i formuläret från dokumentet och skicka sedan in\nFORM Exempelkliniken - Ny patientregistrering\nELEMENT Edit \"Läkare\" value=\"\"","label":17,"meta":{"action":"skip","form":"Exempelkliniken - Ny patientregistrering","gold_option":"hoppa över","role":"Edit","source":"hand-authored"},"options":["fyll Förnamn: Anna","fyll Efternamn: Lindqvist","fyll Personnummer: 560314-2381","fyll Telefon: 070-341 22 87","fyll E-post: anna.lindqvist@exempel.invalid","fyll Gatuadress: Kungsgatan 42","fyll Postnummer: 753 20","fyll Ort: Uppsala","fyll Vårdcentral: Exempelvårdcentralen","fyll Allergier: Penicillin","fyll Anhörig: Erik Lindqvist","fyll Anhörigs telefon: 070-882 19 03","fyll Kursnamn: Anatomi och fysiologi","fyll Bankgiro: 552-7731","fyll Fakturadatum: 2026-09-14","kryssa","klicka","hoppa över"]}
15
+ {"context":"UPPGIFT fyll i formuläret från dokumentet och skicka sedan in\nFORM Exempelkliniken - Ny patientregistrering\nELEMENT CheckBox \"Jag samtycker till behandling av personuppgifter\" unchecked","label":15,"meta":{"action":"check","form":"Exempelkliniken - Ny patientregistrering","gold_option":"kryssa","role":"CheckBox","source":"hand-authored"},"options":["fyll Förnamn: Anna","fyll Efternamn: Lindqvist","fyll Personnummer: 560314-2381","fyll Telefon: 070-341 22 87","fyll E-post: anna.lindqvist@exempel.invalid","fyll Gatuadress: Kungsgatan 42","fyll Postnummer: 753 20","fyll Ort: Uppsala","fyll Vårdcentral: Exempelvårdcentralen","fyll Allergier: Penicillin","fyll Anhörig: Erik Lindqvist","fyll Anhörigs telefon: 070-882 19 03","fyll Kursnamn: Anatomi och fysiologi","fyll Bankgiro: 552-7731","fyll Fakturadatum: 2026-09-14","kryssa","klicka","hoppa över"]}
16
+ {"context":"UPPGIFT fyll i formuläret från dokumentet och skicka sedan in\nFORM Exempelkliniken - Ny patientregistrering\nELEMENT CheckBox \"Skicka nyhetsbrev\" unchecked","label":17,"meta":{"action":"skip","form":"Exempelkliniken - Ny patientregistrering","gold_option":"hoppa över","role":"CheckBox","source":"hand-authored"},"options":["fyll Förnamn: Anna","fyll Efternamn: Lindqvist","fyll Personnummer: 560314-2381","fyll Telefon: 070-341 22 87","fyll E-post: anna.lindqvist@exempel.invalid","fyll Gatuadress: Kungsgatan 42","fyll Postnummer: 753 20","fyll Ort: Uppsala","fyll Vårdcentral: Exempelvårdcentralen","fyll Allergier: Penicillin","fyll Anhörig: Erik Lindqvist","fyll Anhörigs telefon: 070-882 19 03","fyll Kursnamn: Anatomi och fysiologi","fyll Bankgiro: 552-7731","fyll Fakturadatum: 2026-09-14","kryssa","klicka","hoppa över"]}
17
+ {"context":"UPPGIFT fyll i formuläret från dokumentet och skicka sedan in\nFORM Exempelkliniken - Ny patientregistrering\nELEMENT Button \"Skicka in\" value=\"\"","label":16,"meta":{"action":"click","form":"Exempelkliniken - Ny patientregistrering","gold_option":"klicka","role":"Button","source":"hand-authored"},"options":["fyll Förnamn: Anna","fyll Efternamn: Lindqvist","fyll Personnummer: 560314-2381","fyll Telefon: 070-341 22 87","fyll E-post: anna.lindqvist@exempel.invalid","fyll Gatuadress: Kungsgatan 42","fyll Postnummer: 753 20","fyll Ort: Uppsala","fyll Vårdcentral: Exempelvårdcentralen","fyll Allergier: Penicillin","fyll Anhörig: Erik Lindqvist","fyll Anhörigs telefon: 070-882 19 03","fyll Kursnamn: Anatomi och fysiologi","fyll Bankgiro: 552-7731","fyll Fakturadatum: 2026-09-14","kryssa","klicka","hoppa över"]}
18
+ {"context":"UPPGIFT fyll i formuläret från dokumentet och skicka sedan in\nFORM Exempelkliniken - Ny patientregistrering\nELEMENT Button \"Avbryt\" value=\"\"","label":17,"meta":{"action":"skip","form":"Exempelkliniken - Ny patientregistrering","gold_option":"hoppa över","role":"Button","source":"hand-authored"},"options":["fyll Förnamn: Anna","fyll Efternamn: Lindqvist","fyll Personnummer: 560314-2381","fyll Telefon: 070-341 22 87","fyll E-post: anna.lindqvist@exempel.invalid","fyll Gatuadress: Kungsgatan 42","fyll Postnummer: 753 20","fyll Ort: Uppsala","fyll Vårdcentral: Exempelvårdcentralen","fyll Allergier: Penicillin","fyll Anhörig: Erik Lindqvist","fyll Anhörigs telefon: 070-882 19 03","fyll Kursnamn: Anatomi och fysiologi","fyll Bankgiro: 552-7731","fyll Fakturadatum: 2026-09-14","kryssa","klicka","hoppa över"]}
19
+ {"context":"UPPGIFT fyll i formuläret från dokumentet och skicka sedan in\nFORM Exempelkliniken - Ny patientregistrering\nELEMENT Edit \"Adressfält\" value=\"https://exempel.invalid/formular\"","label":17,"meta":{"action":"skip","form":"Exempelkliniken - Ny patientregistrering","gold_option":"hoppa över","role":"Edit","source":"hand-authored"},"options":["fyll Förnamn: Anna","fyll Efternamn: Lindqvist","fyll Personnummer: 560314-2381","fyll Telefon: 070-341 22 87","fyll E-post: anna.lindqvist@exempel.invalid","fyll Gatuadress: Kungsgatan 42","fyll Postnummer: 753 20","fyll Ort: Uppsala","fyll Vårdcentral: Exempelvårdcentralen","fyll Allergier: Penicillin","fyll Anhörig: Erik Lindqvist","fyll Anhörigs telefon: 070-882 19 03","fyll Kursnamn: Anatomi och fysiologi","fyll Bankgiro: 552-7731","fyll Fakturadatum: 2026-09-14","kryssa","klicka","hoppa över"]}
20
+ {"context":"UPPGIFT fyll i formuläret från dokumentet och skicka sedan in\nFORM Norrsken Teknik AB - Reseräkning\nELEMENT Edit \"Namn\" value=\"\"","label":0,"meta":{"action":"fill","form":"Norrsken Teknik AB - Reseräkning","gold_option":"fyll Namn: Johan Bergström","role":"Edit","source":"hand-authored"},"options":["fyll Namn: Johan Bergström","fyll Anställningsnummer: AN-338201","fyll Avdelning: IT och digitalisering","fyll Bankgiro: 589-2240","fyll Plusgiro: 38 24 19-6","fyll Belopp: 12 450,00 kr","fyll Momsregistreringsnummer: SE556677889901","fyll Utfärdad: 2026-09-11","fyll Förfallodatum: 2026-10-15","fyll Referens: 8836001928","fyll Organisationsnummer: 556677-8899","fyll Kundnummer: M-441023","kryssa","klicka","hoppa över"]}
21
+ {"context":"UPPGIFT fyll i formuläret från dokumentet och skicka sedan in\nFORM Norrsken Teknik AB - Reseräkning\nELEMENT Edit \"Anställningsnummer\" value=\"\"","label":1,"meta":{"action":"fill","form":"Norrsken Teknik AB - Reseräkning","gold_option":"fyll Anställningsnummer: AN-338201","role":"Edit","source":"hand-authored"},"options":["fyll Namn: Johan Bergström","fyll Anställningsnummer: AN-338201","fyll Avdelning: IT och digitalisering","fyll Bankgiro: 589-2240","fyll Plusgiro: 38 24 19-6","fyll Belopp: 12 450,00 kr","fyll Momsregistreringsnummer: SE556677889901","fyll Utfärdad: 2026-09-11","fyll Förfallodatum: 2026-10-15","fyll Referens: 8836001928","fyll Organisationsnummer: 556677-8899","fyll Kundnummer: M-441023","kryssa","klicka","hoppa över"]}
22
+ {"context":"UPPGIFT fyll i formuläret från dokumentet och skicka sedan in\nFORM Norrsken Teknik AB - Reseräkning\nELEMENT Edit \"Avdelning\" value=\"\"","label":2,"meta":{"action":"fill","form":"Norrsken Teknik AB - Reseräkning","gold_option":"fyll Avdelning: IT och digitalisering","role":"Edit","source":"hand-authored"},"options":["fyll Namn: Johan Bergström","fyll Anställningsnummer: AN-338201","fyll Avdelning: IT och digitalisering","fyll Bankgiro: 589-2240","fyll Plusgiro: 38 24 19-6","fyll Belopp: 12 450,00 kr","fyll Momsregistreringsnummer: SE556677889901","fyll Utfärdad: 2026-09-11","fyll Förfallodatum: 2026-10-15","fyll Referens: 8836001928","fyll Organisationsnummer: 556677-8899","fyll Kundnummer: M-441023","kryssa","klicka","hoppa över"]}
23
+ {"context":"UPPGIFT fyll i formuläret från dokumentet och skicka sedan in\nFORM Norrsken Teknik AB - Reseräkning\nELEMENT Edit \"Bankgironummer\" value=\"\" hint=\"XXX-XXXX\"","label":3,"meta":{"action":"fill","form":"Norrsken Teknik AB - Reseräkning","gold_option":"fyll Bankgiro: 589-2240","role":"Edit","source":"hand-authored"},"options":["fyll Namn: Johan Bergström","fyll Anställningsnummer: AN-338201","fyll Avdelning: IT och digitalisering","fyll Bankgiro: 589-2240","fyll Plusgiro: 38 24 19-6","fyll Belopp: 12 450,00 kr","fyll Momsregistreringsnummer: SE556677889901","fyll Utfärdad: 2026-09-11","fyll Förfallodatum: 2026-10-15","fyll Referens: 8836001928","fyll Organisationsnummer: 556677-8899","fyll Kundnummer: M-441023","kryssa","klicka","hoppa över"]}
24
+ {"context":"UPPGIFT fyll i formuläret från dokumentet och skicka sedan in\nFORM Norrsken Teknik AB - Reseräkning\nELEMENT Edit \"Plusgironummer\" value=\"\"","label":4,"meta":{"action":"fill","form":"Norrsken Teknik AB - Reseräkning","gold_option":"fyll Plusgiro: 38 24 19-6","role":"Edit","source":"hand-authored"},"options":["fyll Namn: Johan Bergström","fyll Anställningsnummer: AN-338201","fyll Avdelning: IT och digitalisering","fyll Bankgiro: 589-2240","fyll Plusgiro: 38 24 19-6","fyll Belopp: 12 450,00 kr","fyll Momsregistreringsnummer: SE556677889901","fyll Utfärdad: 2026-09-11","fyll Förfallodatum: 2026-10-15","fyll Referens: 8836001928","fyll Organisationsnummer: 556677-8899","fyll Kundnummer: M-441023","kryssa","klicka","hoppa över"]}
25
+ {"context":"UPPGIFT fyll i formuläret från dokumentet och skicka sedan in\nFORM Norrsken Teknik AB - Reseräkning\nELEMENT Edit \"Summa\" value=\"\"","label":5,"meta":{"action":"fill","form":"Norrsken Teknik AB - Reseräkning","gold_option":"fyll Belopp: 12 450,00 kr","role":"Edit","source":"hand-authored"},"options":["fyll Namn: Johan Bergström","fyll Anställningsnummer: AN-338201","fyll Avdelning: IT och digitalisering","fyll Bankgiro: 589-2240","fyll Plusgiro: 38 24 19-6","fyll Belopp: 12 450,00 kr","fyll Momsregistreringsnummer: SE556677889901","fyll Utfärdad: 2026-09-11","fyll Förfallodatum: 2026-10-15","fyll Referens: 8836001928","fyll Organisationsnummer: 556677-8899","fyll Kundnummer: M-441023","kryssa","klicka","hoppa över"]}
26
+ {"context":"UPPGIFT fyll i formuläret från dokumentet och skicka sedan in\nFORM Norrsken Teknik AB - Reseräkning\nELEMENT Edit \"Momsnr\" value=\"\"","label":6,"meta":{"action":"fill","form":"Norrsken Teknik AB - Reseräkning","gold_option":"fyll Momsregistreringsnummer: SE556677889901","role":"Edit","source":"hand-authored"},"options":["fyll Namn: Johan Bergström","fyll Anställningsnummer: AN-338201","fyll Avdelning: IT och digitalisering","fyll Bankgiro: 589-2240","fyll Plusgiro: 38 24 19-6","fyll Belopp: 12 450,00 kr","fyll Momsregistreringsnummer: SE556677889901","fyll Utfärdad: 2026-09-11","fyll Förfallodatum: 2026-10-15","fyll Referens: 8836001928","fyll Organisationsnummer: 556677-8899","fyll Kundnummer: M-441023","kryssa","klicka","hoppa över"]}
27
+ {"context":"UPPGIFT fyll i formuläret från dokumentet och skicka sedan in\nFORM Norrsken Teknik AB - Reseräkning\nELEMENT Edit \"Fakturadatum\" value=\"\"","label":7,"meta":{"action":"fill","form":"Norrsken Teknik AB - Reseräkning","gold_option":"fyll Utfärdad: 2026-09-11","role":"Edit","source":"hand-authored"},"options":["fyll Namn: Johan Bergström","fyll Anställningsnummer: AN-338201","fyll Avdelning: IT och digitalisering","fyll Bankgiro: 589-2240","fyll Plusgiro: 38 24 19-6","fyll Belopp: 12 450,00 kr","fyll Momsregistreringsnummer: SE556677889901","fyll Utfärdad: 2026-09-11","fyll Förfallodatum: 2026-10-15","fyll Referens: 8836001928","fyll Organisationsnummer: 556677-8899","fyll Kundnummer: M-441023","kryssa","klicka","hoppa över"]}
28
+ {"context":"UPPGIFT fyll i formuläret från dokumentet och skicka sedan in\nFORM Norrsken Teknik AB - Reseräkning\nELEMENT Edit \"Betalas senast\" value=\"\"","label":8,"meta":{"action":"fill","form":"Norrsken Teknik AB - Reseräkning","gold_option":"fyll Förfallodatum: 2026-10-15","role":"Edit","source":"hand-authored"},"options":["fyll Namn: Johan Bergström","fyll Anställningsnummer: AN-338201","fyll Avdelning: IT och digitalisering","fyll Bankgiro: 589-2240","fyll Plusgiro: 38 24 19-6","fyll Belopp: 12 450,00 kr","fyll Momsregistreringsnummer: SE556677889901","fyll Utfärdad: 2026-09-11","fyll Förfallodatum: 2026-10-15","fyll Referens: 8836001928","fyll Organisationsnummer: 556677-8899","fyll Kundnummer: M-441023","kryssa","klicka","hoppa över"]}
29
+ {"context":"UPPGIFT fyll i formuläret från dokumentet och skicka sedan in\nFORM Norrsken Teknik AB - Reseräkning\nELEMENT Edit \"Referensnummer\" value=\"\"","label":9,"meta":{"action":"fill","form":"Norrsken Teknik AB - Reseräkning","gold_option":"fyll Referens: 8836001928","role":"Edit","source":"hand-authored"},"options":["fyll Namn: Johan Bergström","fyll Anställningsnummer: AN-338201","fyll Avdelning: IT och digitalisering","fyll Bankgiro: 589-2240","fyll Plusgiro: 38 24 19-6","fyll Belopp: 12 450,00 kr","fyll Momsregistreringsnummer: SE556677889901","fyll Utfärdad: 2026-09-11","fyll Förfallodatum: 2026-10-15","fyll Referens: 8836001928","fyll Organisationsnummer: 556677-8899","fyll Kundnummer: M-441023","kryssa","klicka","hoppa över"]}
30
+ {"context":"UPPGIFT fyll i formuläret från dokumentet och skicka sedan in\nFORM Norrsken Teknik AB - Reseräkning\nELEMENT Edit \"Org.nr\" value=\"\"","label":10,"meta":{"action":"fill","form":"Norrsken Teknik AB - Reseräkning","gold_option":"fyll Organisationsnummer: 556677-8899","role":"Edit","source":"hand-authored"},"options":["fyll Namn: Johan Bergström","fyll Anställningsnummer: AN-338201","fyll Avdelning: IT och digitalisering","fyll Bankgiro: 589-2240","fyll Plusgiro: 38 24 19-6","fyll Belopp: 12 450,00 kr","fyll Momsregistreringsnummer: SE556677889901","fyll Utfärdad: 2026-09-11","fyll Förfallodatum: 2026-10-15","fyll Referens: 8836001928","fyll Organisationsnummer: 556677-8899","fyll Kundnummer: M-441023","kryssa","klicka","hoppa över"]}
31
+ {"context":"UPPGIFT fyll i formuläret från dokumentet och skicka sedan in\nFORM Norrsken Teknik AB - Reseräkning\nELEMENT Edit \"Kundnummer\" value=\"\"","label":11,"meta":{"action":"fill","form":"Norrsken Teknik AB - Reseräkning","gold_option":"fyll Kundnummer: M-441023","role":"Edit","source":"hand-authored"},"options":["fyll Namn: Johan Bergström","fyll Anställningsnummer: AN-338201","fyll Avdelning: IT och digitalisering","fyll Bankgiro: 589-2240","fyll Plusgiro: 38 24 19-6","fyll Belopp: 12 450,00 kr","fyll Momsregistreringsnummer: SE556677889901","fyll Utfärdad: 2026-09-11","fyll Förfallodatum: 2026-10-15","fyll Referens: 8836001928","fyll Organisationsnummer: 556677-8899","fyll Kundnummer: M-441023","kryssa","klicka","hoppa över"]}
32
+ {"context":"UPPGIFT fyll i formuläret från dokumentet och skicka sedan in\nFORM Norrsken Teknik AB - Reseräkning\nELEMENT Edit \"Summa\" value=\"12 450,00 kr\"","label":14,"meta":{"action":"skip","form":"Norrsken Teknik AB - Reseräkning","gold_option":"hoppa över","role":"Edit","source":"hand-authored"},"options":["fyll Namn: Johan Bergström","fyll Anställningsnummer: AN-338201","fyll Avdelning: IT och digitalisering","fyll Bankgiro: 589-2240","fyll Plusgiro: 38 24 19-6","fyll Belopp: 12 450,00 kr","fyll Momsregistreringsnummer: SE556677889901","fyll Utfärdad: 2026-09-11","fyll Förfallodatum: 2026-10-15","fyll Referens: 8836001928","fyll Organisationsnummer: 556677-8899","fyll Kundnummer: M-441023","kryssa","klicka","hoppa över"]}
33
+ {"context":"UPPGIFT fyll i formuläret från dokumentet och skicka sedan in\nFORM Norrsken Teknik AB - Reseräkning\nELEMENT CheckBox \"Jag intygar att uppgifterna är korrekta\" unchecked","label":12,"meta":{"action":"check","form":"Norrsken Teknik AB - Reseräkning","gold_option":"kryssa","role":"CheckBox","source":"hand-authored"},"options":["fyll Namn: Johan Bergström","fyll Anställningsnummer: AN-338201","fyll Avdelning: IT och digitalisering","fyll Bankgiro: 589-2240","fyll Plusgiro: 38 24 19-6","fyll Belopp: 12 450,00 kr","fyll Momsregistreringsnummer: SE556677889901","fyll Utfärdad: 2026-09-11","fyll Förfallodatum: 2026-10-15","fyll Referens: 8836001928","fyll Organisationsnummer: 556677-8899","fyll Kundnummer: M-441023","kryssa","klicka","hoppa över"]}
34
+ {"context":"UPPGIFT fyll i formuläret från dokumentet och skicka sedan in\nFORM Norrsken Teknik AB - Reseräkning\nELEMENT Button \"Spara utkast\" value=\"\"","label":14,"meta":{"action":"skip","form":"Norrsken Teknik AB - Reseräkning","gold_option":"hoppa över","role":"Button","source":"hand-authored"},"options":["fyll Namn: Johan Bergström","fyll Anställningsnummer: AN-338201","fyll Avdelning: IT och digitalisering","fyll Bankgiro: 589-2240","fyll Plusgiro: 38 24 19-6","fyll Belopp: 12 450,00 kr","fyll Momsregistreringsnummer: SE556677889901","fyll Utfärdad: 2026-09-11","fyll Förfallodatum: 2026-10-15","fyll Referens: 8836001928","fyll Organisationsnummer: 556677-8899","fyll Kundnummer: M-441023","kryssa","klicka","hoppa över"]}
35
+ {"context":"UPPGIFT fyll i formuläret från dokumentet och skicka sedan in\nFORM Norrsken Teknik AB - Reseräkning\nELEMENT Button \"Skicka\" value=\"\"","label":13,"meta":{"action":"click","form":"Norrsken Teknik AB - Reseräkning","gold_option":"klicka","role":"Button","source":"hand-authored"},"options":["fyll Namn: Johan Bergström","fyll Anställningsnummer: AN-338201","fyll Avdelning: IT och digitalisering","fyll Bankgiro: 589-2240","fyll Plusgiro: 38 24 19-6","fyll Belopp: 12 450,00 kr","fyll Momsregistreringsnummer: SE556677889901","fyll Utfärdad: 2026-09-11","fyll Förfallodatum: 2026-10-15","fyll Referens: 8836001928","fyll Organisationsnummer: 556677-8899","fyll Kundnummer: M-441023","kryssa","klicka","hoppa över"]}
36
+ {"context":"UPPGIFT fyll i formuläret från dokumentet och skicka sedan in\nFORM Norrsken Teknik AB - Reseräkning\nELEMENT MenuItem \"Arkiv\" value=\"\"","label":14,"meta":{"action":"skip","form":"Norrsken Teknik AB - Reseräkning","gold_option":"hoppa över","role":"MenuItem","source":"hand-authored"},"options":["fyll Namn: Johan Bergström","fyll Anställningsnummer: AN-338201","fyll Avdelning: IT och digitalisering","fyll Bankgiro: 589-2240","fyll Plusgiro: 38 24 19-6","fyll Belopp: 12 450,00 kr","fyll Momsregistreringsnummer: SE556677889901","fyll Utfärdad: 2026-09-11","fyll Förfallodatum: 2026-10-15","fyll Referens: 8836001928","fyll Organisationsnummer: 556677-8899","fyll Kundnummer: M-441023","kryssa","klicka","hoppa över"]}
37
+ {"context":"UPPGIFT fyll i formuläret från dokumentet och skicka sedan in\nFORM Testförsäkring - Skadeanmälan\nELEMENT Edit \"Försäkringsnr\" value=\"\"","label":0,"meta":{"action":"fill","form":"Testförsäkring - Skadeanmälan","gold_option":"fyll Försäkringsnummer: F-2291-48310","role":"Edit","source":"hand-authored"},"options":["fyll Försäkringsnummer: F-2291-48310","fyll Skadenummer: S-771204","fyll Skadedatum: 2026-08-27","fyll Händelseort: Västerås","fyll Besök: Ort","fyll Registreringsnummer: JHL 402","fyll Fordonsmärke: Testmotors Prov","fyll Beskrivning: Skadan upptäcktes vid leverans.","fyll Handläggare: Malin Sjögren","fyll Ärendenummer: EX-2026-00281","fyll Bankgiro: 341-9087","kryssa","klicka","hoppa över"]}
38
+ {"context":"UPPGIFT fyll i formuläret från dokumentet och skicka sedan in\nFORM Testförsäkring - Skadeanmälan\nELEMENT Edit \"Skadenummer\" value=\"\"","label":1,"meta":{"action":"fill","form":"Testförsäkring - Skadeanmälan","gold_option":"fyll Skadenummer: S-771204","role":"Edit","source":"hand-authored"},"options":["fyll Försäkringsnummer: F-2291-48310","fyll Skadenummer: S-771204","fyll Skadedatum: 2026-08-27","fyll Händelseort: Västerås","fyll Besök: Ort","fyll Registreringsnummer: JHL 402","fyll Fordonsmärke: Testmotors Prov","fyll Beskrivning: Skadan upptäcktes vid leverans.","fyll Handläggare: Malin Sjögren","fyll Ärendenummer: EX-2026-00281","fyll Bankgiro: 341-9087","kryssa","klicka","hoppa över"]}
39
+ {"context":"UPPGIFT fyll i formuläret från dokumentet och skicka sedan in\nFORM Testförsäkring - Skadeanmälan\nELEMENT Edit \"Datum för skadan\" value=\"\"","label":2,"meta":{"action":"fill","form":"Testförsäkring - Skadeanmälan","gold_option":"fyll Skadedatum: 2026-08-27","role":"Edit","source":"hand-authored"},"options":["fyll Försäkringsnummer: F-2291-48310","fyll Skadenummer: S-771204","fyll Skadedatum: 2026-08-27","fyll Händelseort: Västerås","fyll Besök: Ort","fyll Registreringsnummer: JHL 402","fyll Fordonsmärke: Testmotors Prov","fyll Beskrivning: Skadan upptäcktes vid leverans.","fyll Handläggare: Malin Sjögren","fyll Ärendenummer: EX-2026-00281","fyll Bankgiro: 341-9087","kryssa","klicka","hoppa över"]}
40
+ {"context":"UPPGIFT fyll i formuläret från dokumentet och skicka sedan in\nFORM Testförsäkring - Skadeanmälan\nELEMENT Edit \"Plats\" value=\"\"","label":3,"meta":{"action":"fill","form":"Testförsäkring - Skadeanmälan","gold_option":"fyll Händelseort: Västerås","role":"Edit","source":"hand-authored"},"options":["fyll Försäkringsnummer: F-2291-48310","fyll Skadenummer: S-771204","fyll Skadedatum: 2026-08-27","fyll Händelseort: Västerås","fyll Besök: Ort","fyll Registreringsnummer: JHL 402","fyll Fordonsmärke: Testmotors Prov","fyll Beskrivning: Skadan upptäcktes vid leverans.","fyll Handläggare: Malin Sjögren","fyll Ärendenummer: EX-2026-00281","fyll Bankgiro: 341-9087","kryssa","klicka","hoppa över"]}
41
+ {"context":"UPPGIFT fyll i formuläret från dokumentet och skicka sedan in\nFORM Testförsäkring - Skadeanmälan\nELEMENT Edit \"Registreringsnummer\" value=\"\" hint=\"ABC 123\"","label":5,"meta":{"action":"fill","form":"Testförsäkring - Skadeanmälan","gold_option":"fyll Registreringsnummer: JHL 402","role":"Edit","source":"hand-authored"},"options":["fyll Försäkringsnummer: F-2291-48310","fyll Skadenummer: S-771204","fyll Skadedatum: 2026-08-27","fyll Händelseort: Västerås","fyll Besök: Ort","fyll Registreringsnummer: JHL 402","fyll Fordonsmärke: Testmotors Prov","fyll Beskrivning: Skadan upptäcktes vid leverans.","fyll Handläggare: Malin Sjögren","fyll Ärendenummer: EX-2026-00281","fyll Bankgiro: 341-9087","kryssa","klicka","hoppa över"]}
42
+ {"context":"UPPGIFT fyll i formuläret från dokumentet och skicka sedan in\nFORM Testförsäkring - Skadeanmälan\nELEMENT Edit \"Fordonsmärke\" value=\"\"","label":6,"meta":{"action":"fill","form":"Testförsäkring - Skadeanmälan","gold_option":"fyll Fordonsmärke: Testmotors Prov","role":"Edit","source":"hand-authored"},"options":["fyll Försäkringsnummer: F-2291-48310","fyll Skadenummer: S-771204","fyll Skadedatum: 2026-08-27","fyll Händelseort: Västerås","fyll Besök: Ort","fyll Registreringsnummer: JHL 402","fyll Fordonsmärke: Testmotors Prov","fyll Beskrivning: Skadan upptäcktes vid leverans.","fyll Handläggare: Malin Sjögren","fyll Ärendenummer: EX-2026-00281","fyll Bankgiro: 341-9087","kryssa","klicka","hoppa över"]}
43
+ {"context":"UPPGIFT fyll i formuläret från dokumentet och skicka sedan in\nFORM Testförsäkring - Skadeanmälan\nELEMENT Edit \"Vad inträffade?\" value=\"\"","label":7,"meta":{"action":"fill","form":"Testförsäkring - Skadeanmälan","gold_option":"fyll Beskrivning: Skadan upptäcktes vid leverans.","role":"Edit","source":"hand-authored"},"options":["fyll Försäkringsnummer: F-2291-48310","fyll Skadenummer: S-771204","fyll Skadedatum: 2026-08-27","fyll Händelseort: Västerås","fyll Besök: Ort","fyll Registreringsnummer: JHL 402","fyll Fordonsmärke: Testmotors Prov","fyll Beskrivning: Skadan upptäcktes vid leverans.","fyll Handläggare: Malin Sjögren","fyll Ärendenummer: EX-2026-00281","fyll Bankgiro: 341-9087","kryssa","klicka","hoppa över"]}
44
+ {"context":"UPPGIFT fyll i formuläret från dokumentet och skicka sedan in\nFORM Testförsäkring - Skadeanmälan\nELEMENT Edit \"Ärendenummer\" value=\"\"","label":9,"meta":{"action":"fill","form":"Testförsäkring - Skadeanmälan","gold_option":"fyll Ärendenummer: EX-2026-00281","role":"Edit","source":"hand-authored"},"options":["fyll Försäkringsnummer: F-2291-48310","fyll Skadenummer: S-771204","fyll Skadedatum: 2026-08-27","fyll Händelseort: Västerås","fyll Besök: Ort","fyll Registreringsnummer: JHL 402","fyll Fordonsmärke: Testmotors Prov","fyll Beskrivning: Skadan upptäcktes vid leverans.","fyll Handläggare: Malin Sjögren","fyll Ärendenummer: EX-2026-00281","fyll Bankgiro: 341-9087","kryssa","klicka","hoppa över"]}
45
+ {"context":"UPPGIFT fyll i formuläret från dokumentet och skicka sedan in\nFORM Testförsäkring - Skadeanmälan\nELEMENT Edit \"Skadenummer\" value=\"S-771204\"","label":13,"meta":{"action":"skip","form":"Testförsäkring - Skadeanmälan","gold_option":"hoppa över","role":"Edit","source":"hand-authored"},"options":["fyll Försäkringsnummer: F-2291-48310","fyll Skadenummer: S-771204","fyll Skadedatum: 2026-08-27","fyll Händelseort: Västerås","fyll Besök: Ort","fyll Registreringsnummer: JHL 402","fyll Fordonsmärke: Testmotors Prov","fyll Beskrivning: Skadan upptäcktes vid leverans.","fyll Handläggare: Malin Sjögren","fyll Ärendenummer: EX-2026-00281","fyll Bankgiro: 341-9087","kryssa","klicka","hoppa över"]}
46
+ {"context":"UPPGIFT fyll i formuläret från dokumentet och skicka sedan in\nFORM Testförsäkring - Skadeanmälan\nELEMENT CheckBox \"Jag har tagit del av informationen om behandling av personuppgifter\" unchecked","label":11,"meta":{"action":"check","form":"Testförsäkring - Skadeanmälan","gold_option":"kryssa","role":"CheckBox","source":"hand-authored"},"options":["fyll Försäkringsnummer: F-2291-48310","fyll Skadenummer: S-771204","fyll Skadedatum: 2026-08-27","fyll Händelseort: Västerås","fyll Besök: Ort","fyll Registreringsnummer: JHL 402","fyll Fordonsmärke: Testmotors Prov","fyll Beskrivning: Skadan upptäcktes vid leverans.","fyll Handläggare: Malin Sjögren","fyll Ärendenummer: EX-2026-00281","fyll Bankgiro: 341-9087","kryssa","klicka","hoppa över"]}
47
+ {"context":"UPPGIFT fyll i formuläret från dokumentet och skicka sedan in\nFORM Testförsäkring - Skadeanmälan\nELEMENT CheckBox \"Kontakta mig per e-post\" unchecked","label":13,"meta":{"action":"skip","form":"Testförsäkring - Skadeanmälan","gold_option":"hoppa över","role":"CheckBox","source":"hand-authored"},"options":["fyll Försäkringsnummer: F-2291-48310","fyll Skadenummer: S-771204","fyll Skadedatum: 2026-08-27","fyll Händelseort: Västerås","fyll Besök: Ort","fyll Registreringsnummer: JHL 402","fyll Fordonsmärke: Testmotors Prov","fyll Beskrivning: Skadan upptäcktes vid leverans.","fyll Handläggare: Malin Sjögren","fyll Ärendenummer: EX-2026-00281","fyll Bankgiro: 341-9087","kryssa","klicka","hoppa över"]}
48
+ {"context":"UPPGIFT fyll i formuläret från dokumentet och skicka sedan in\nFORM Testförsäkring - Skadeanmälan\nELEMENT Button \"Ladda upp bilaga\" value=\"\"","label":13,"meta":{"action":"skip","form":"Testförsäkring - Skadeanmälan","gold_option":"hoppa över","role":"Button","source":"hand-authored"},"options":["fyll Försäkringsnummer: F-2291-48310","fyll Skadenummer: S-771204","fyll Skadedatum: 2026-08-27","fyll Händelseort: Västerås","fyll Besök: Ort","fyll Registreringsnummer: JHL 402","fyll Fordonsmärke: Testmotors Prov","fyll Beskrivning: Skadan upptäcktes vid leverans.","fyll Handläggare: Malin Sjögren","fyll Ärendenummer: EX-2026-00281","fyll Bankgiro: 341-9087","kryssa","klicka","hoppa över"]}
49
+ {"context":"UPPGIFT fyll i formuläret från dokumentet och skicka sedan in\nFORM Testförsäkring - Skadeanmälan\nELEMENT Button \"Skicka ansökan\" value=\"\"","label":12,"meta":{"action":"click","form":"Testförsäkring - Skadeanmälan","gold_option":"klicka","role":"Button","source":"hand-authored"},"options":["fyll Försäkringsnummer: F-2291-48310","fyll Skadenummer: S-771204","fyll Skadedatum: 2026-08-27","fyll Händelseort: Västerås","fyll Besök: Ort","fyll Registreringsnummer: JHL 402","fyll Fordonsmärke: Testmotors Prov","fyll Beskrivning: Skadan upptäcktes vid leverans.","fyll Handläggare: Malin Sjögren","fyll Ärendenummer: EX-2026-00281","fyll Bankgiro: 341-9087","kryssa","klicka","hoppa över"]}
50
+ {"context":"UPPGIFT fyll i formuläret från dokumentet och skicka sedan in\nFORM Testförsäkring - Skadeanmälan\nELEMENT Button \"Stäng\" value=\"\"","label":13,"meta":{"action":"skip","form":"Testförsäkring - Skadeanmälan","gold_option":"hoppa över","role":"Button","source":"hand-authored"},"options":["fyll Försäkringsnummer: F-2291-48310","fyll Skadenummer: S-771204","fyll Skadedatum: 2026-08-27","fyll Händelseort: Västerås","fyll Besök: Ort","fyll Registreringsnummer: JHL 402","fyll Fordonsmärke: Testmotors Prov","fyll Beskrivning: Skadan upptäcktes vid leverans.","fyll Handläggare: Malin Sjögren","fyll Ärendenummer: EX-2026-00281","fyll Bankgiro: 341-9087","kryssa","klicka","hoppa över"]}
eval/results-coreml.json CHANGED
@@ -1,40 +1,41 @@
1
  {
2
- "checkpoint": "runs/sv-tinyx/model",
3
  "limits": {
4
  "context_bytes": 224,
5
  "max_options": 40,
6
  "option_bytes": 96
7
  },
8
  "torch_baseline": {
 
9
  "per_action": {
10
  "check": {
11
- "acc": 0.9827586206896551,
12
- "n": 58
13
  },
14
  "click": {
15
- "acc": 0.9367088607594937,
16
- "n": 79
17
  },
18
  "fill": {
19
- "acc": 0.7554455445544555,
20
- "n": 1010
21
  },
22
  "skip": {
23
- "acc": 0.8801369863013698,
24
- "n": 1168
25
  }
26
  },
27
- "rows": 2315,
28
- "silent_skip_rate_of_fills": 0.07524752475247524,
29
- "silent_skips": 76,
30
- "top1": 0.8302375809935205
31
  },
32
  "variants": {
33
  "fp16": {
34
  "handwritten_demo__ane": {
35
  "compute_units": "ComputeUnit.CPU_AND_NE",
36
- "latency_ms_median": 1.2992918491363525,
37
- "latency_ms_p95": 1.4392081648111343,
 
38
  "mismatches_vs_torch": 0,
39
  "parity_with_torch": 1.0,
40
  "per_action": {
@@ -47,84 +48,84 @@
47
  "n": 3
48
  },
49
  "fill": {
50
- "acc": 0.7931034482758621,
51
  "n": 29
52
  },
53
  "skip": {
54
- "acc": 0.9166666666666666,
55
  "n": 12
56
  }
57
  },
58
- "rows": 47,
59
- "silent_skip_rate_of_fills": 0.10344827586206896,
60
- "silent_skips": 3,
61
- "top1": 0.851063829787234
62
  },
63
- "package_bytes": 1507481,
64
  "synthetic_test__ane": {
65
  "compute_units": "ComputeUnit.CPU_AND_NE",
66
- "latency_ms_median": 1.3071454595774412,
67
- "latency_ms_p95": 1.4601247385144234,
68
- "mismatches_vs_torch": 3,
69
- "parity_with_torch": 0.9987024221453287,
 
70
  "per_action": {
71
  "check": {
72
- "acc": 0.9827586206896551,
73
- "n": 58
74
  },
75
  "click": {
76
- "acc": 0.9367088607594937,
77
- "n": 79
78
  },
79
  "fill": {
80
- "acc": 0.753968253968254,
81
- "n": 1008
82
  },
83
  "skip": {
84
- "acc": 0.8808911739502999,
85
- "n": 1167
86
  }
87
  },
88
- "rows": 2312,
89
- "silent_skip_rate_of_fills": 0.07539682539682539,
90
- "silent_skips": 76,
91
- "top1": 0.8300173010380623
92
  },
93
  "synthetic_test__cpu": {
94
  "compute_units": "ComputeUnit.CPU_ONLY",
95
- "latency_ms_median": 1.733562909066677,
96
- "latency_ms_p95": 1.9167079590260983,
97
- "mismatches_vs_torch": 2,
98
- "parity_with_torch": 0.9991349480968859,
 
99
  "per_action": {
100
  "check": {
101
- "acc": 0.9827586206896551,
102
- "n": 58
103
  },
104
  "click": {
105
- "acc": 0.9367088607594937,
106
- "n": 79
107
  },
108
  "fill": {
109
- "acc": 0.7549603174603174,
110
- "n": 1008
111
  },
112
  "skip": {
113
- "acc": 0.8808911739502999,
114
- "n": 1167
115
  }
116
  },
117
- "rows": 2312,
118
- "silent_skip_rate_of_fills": 0.07539682539682539,
119
- "silent_skips": 76,
120
- "top1": 0.8304498269896193
121
  }
122
  },
123
  "int4": {
124
  "handwritten_demo__ane": {
125
  "compute_units": "ComputeUnit.CPU_AND_NE",
126
- "latency_ms_median": 1.8591247498989105,
127
- "latency_ms_p95": 1.993041019886732,
 
128
  "mismatches_vs_torch": 32,
129
  "parity_with_torch": 0.3191489361702128,
130
  "per_action": {
@@ -137,7 +138,7 @@
137
  "n": 3
138
  },
139
  "fill": {
140
- "acc": 0.034482758620689655,
141
  "n": 29
142
  },
143
  "skip": {
@@ -145,47 +146,47 @@
145
  "n": 12
146
  }
147
  },
148
- "rows": 47,
149
- "silent_skip_rate_of_fills": 0.9655172413793104,
150
- "silent_skips": 28,
151
- "top1": 0.2765957446808511
152
  },
153
- "package_bytes": 492584,
154
  "synthetic_test__ane": {
155
  "compute_units": "ComputeUnit.CPU_AND_NE",
156
- "latency_ms_median": 1.9683334976434708,
157
- "latency_ms_p95": 2.099000383168459,
158
- "mismatches_vs_torch": 1186,
159
- "parity_with_torch": 0.4870242214532872,
 
160
  "per_action": {
161
  "check": {
162
- "acc": 0.0,
163
- "n": 58
164
  },
165
  "click": {
166
  "acc": 0.0,
167
- "n": 79
168
  },
169
  "fill": {
170
- "acc": 0.018849206349206348,
171
- "n": 1008
172
  },
173
  "skip": {
174
- "acc": 0.9914310197086547,
175
- "n": 1167
176
  }
177
  },
178
- "rows": 2312,
179
- "silent_skip_rate_of_fills": 0.9464285714285714,
180
- "silent_skips": 954,
181
- "top1": 0.5086505190311419
182
  }
183
  },
184
  "int8": {
185
  "handwritten_demo__ane": {
186
  "compute_units": "ComputeUnit.CPU_AND_NE",
187
- "latency_ms_median": 1.31650036200881,
188
- "latency_ms_p95": 1.4507090672850609,
 
189
  "mismatches_vs_torch": 0,
190
  "parity_with_torch": 1.0,
191
  "per_action": {
@@ -198,48 +199,47 @@
198
  "n": 3
199
  },
200
  "fill": {
201
- "acc": 0.7931034482758621,
202
  "n": 29
203
  },
204
  "skip": {
205
- "acc": 0.9166666666666666,
206
  "n": 12
207
  }
208
  },
209
- "rows": 47,
210
- "silent_skip_rate_of_fills": 0.10344827586206896,
211
- "silent_skips": 3,
212
- "top1": 0.851063829787234
213
  },
214
- "package_bytes": 806132,
215
  "synthetic_test__ane": {
216
  "compute_units": "ComputeUnit.CPU_AND_NE",
217
- "latency_ms_median": 1.315583474934101,
218
- "latency_ms_p95": 1.401625107973814,
219
- "mismatches_vs_torch": 9,
220
- "parity_with_torch": 0.9961072664359861,
 
221
  "per_action": {
222
  "check": {
223
- "acc": 0.9827586206896551,
224
- "n": 58
225
  },
226
  "click": {
227
- "acc": 0.9367088607594937,
228
- "n": 79
229
  },
230
  "fill": {
231
- "acc": 0.753968253968254,
232
- "n": 1008
233
  },
234
  "skip": {
235
- "acc": 0.882604970008569,
236
- "n": 1167
237
  }
238
  },
239
- "rows": 2312,
240
- "silent_skip_rate_of_fills": 0.07539682539682539,
241
- "silent_skips": 76,
242
- "top1": 0.8308823529411765
243
  }
244
  }
245
  }
 
1
  {
2
+ "checkpoint": "runs/sv-tinyx-10000/model",
3
  "limits": {
4
  "context_bytes": 224,
5
  "max_options": 40,
6
  "option_bytes": 96
7
  },
8
  "torch_baseline": {
9
+ "examples": 29839,
10
  "per_action": {
11
  "check": {
12
+ "acc": 1.0,
13
+ "n": 855
14
  },
15
  "click": {
16
+ "acc": 1.0,
17
+ "n": 1009
18
  },
19
  "fill": {
20
+ "acc": 0.9900317827217567,
21
+ "n": 13844
22
  },
23
  "skip": {
24
+ "acc": 0.9947632863916213,
25
+ "n": 14131
26
  }
27
  },
28
+ "silent_skip_rate_of_fills": 7.22334585379948e-05,
29
+ "skipped_when_fill_expected": 1,
30
+ "top1": 0.9928952042628775
 
31
  },
32
  "variants": {
33
  "fp16": {
34
  "handwritten_demo__ane": {
35
  "compute_units": "ComputeUnit.CPU_AND_NE",
36
+ "examples": 47,
37
+ "latency_ms_median": 1.3022092171013355,
38
+ "latency_ms_p95": 1.6720420680940151,
39
  "mismatches_vs_torch": 0,
40
  "parity_with_torch": 1.0,
41
  "per_action": {
 
48
  "n": 3
49
  },
50
  "fill": {
51
+ "acc": 1.0,
52
  "n": 29
53
  },
54
  "skip": {
55
+ "acc": 1.0,
56
  "n": 12
57
  }
58
  },
59
+ "silent_skip_rate_of_fills": 0.0,
60
+ "skipped_when_fill_expected": 0,
61
+ "top1": 1.0
 
62
  },
63
+ "package_bytes": 1507474,
64
  "synthetic_test__ane": {
65
  "compute_units": "ComputeUnit.CPU_AND_NE",
66
+ "examples": 29836,
67
+ "latency_ms_median": 1.313916640356183,
68
+ "latency_ms_p95": 1.412208192050457,
69
+ "mismatches_vs_torch": 15,
70
+ "parity_with_torch": 0.9994972516423113,
71
  "per_action": {
72
  "check": {
73
+ "acc": 1.0,
74
+ "n": 855
75
  },
76
  "click": {
77
+ "acc": 1.0,
78
+ "n": 1009
79
  },
80
  "fill": {
81
+ "acc": 0.9899580985406733,
82
+ "n": 13842
83
  },
84
  "skip": {
85
+ "acc": 0.994762915782024,
86
+ "n": 14130
87
  }
88
  },
89
+ "silent_skip_rate_of_fills": 7.224389539083947e-05,
90
+ "skipped_when_fill_expected": 1,
91
+ "top1": 0.9928609733208205
 
92
  },
93
  "synthetic_test__cpu": {
94
  "compute_units": "ComputeUnit.CPU_ONLY",
95
+ "examples": 29836,
96
+ "latency_ms_median": 1.7267910297960043,
97
+ "latency_ms_p95": 1.9287499599158764,
98
+ "mismatches_vs_torch": 14,
99
+ "parity_with_torch": 0.9995307681994905,
100
  "per_action": {
101
  "check": {
102
+ "acc": 1.0,
103
+ "n": 855
104
  },
105
  "click": {
106
+ "acc": 1.0,
107
+ "n": 1009
108
  },
109
  "fill": {
110
+ "acc": 0.9897413668545008,
111
+ "n": 13842
112
  },
113
  "skip": {
114
+ "acc": 0.994762915782024,
115
+ "n": 14130
116
  }
117
  },
118
+ "silent_skip_rate_of_fills": 7.224389539083947e-05,
119
+ "skipped_when_fill_expected": 1,
120
+ "top1": 0.9927604236492827
 
121
  }
122
  },
123
  "int4": {
124
  "handwritten_demo__ane": {
125
  "compute_units": "ComputeUnit.CPU_AND_NE",
126
+ "examples": 47,
127
+ "latency_ms_median": 1.8585827201604843,
128
+ "latency_ms_p95": 2.018083818256855,
129
  "mismatches_vs_torch": 32,
130
  "parity_with_torch": 0.3191489361702128,
131
  "per_action": {
 
138
  "n": 3
139
  },
140
  "fill": {
141
+ "acc": 0.10344827586206896,
142
  "n": 29
143
  },
144
  "skip": {
 
146
  "n": 12
147
  }
148
  },
149
+ "silent_skip_rate_of_fills": 0.896551724137931,
150
+ "skipped_when_fill_expected": 26,
151
+ "top1": 0.3191489361702128
 
152
  },
153
+ "package_bytes": 492577,
154
  "synthetic_test__ane": {
155
  "compute_units": "ComputeUnit.CPU_AND_NE",
156
+ "examples": 29836,
157
+ "latency_ms_median": 1.9839999731630087,
158
+ "latency_ms_p95": 2.11525009945035,
159
+ "mismatches_vs_torch": 15015,
160
+ "parity_with_torch": 0.4967488939536131,
161
  "per_action": {
162
  "check": {
163
+ "acc": 0.012865497076023392,
164
+ "n": 855
165
  },
166
  "click": {
167
  "acc": 0.0,
168
+ "n": 1009
169
  },
170
  "fill": {
171
+ "acc": 0.06408033521167461,
172
+ "n": 13842
173
  },
174
  "skip": {
175
+ "acc": 0.9905166312809625,
176
+ "n": 14130
177
  }
178
  },
179
+ "silent_skip_rate_of_fills": 0.9143909839618553,
180
+ "skipped_when_fill_expected": 12657,
181
+ "top1": 0.4991956026276981
 
182
  }
183
  },
184
  "int8": {
185
  "handwritten_demo__ane": {
186
  "compute_units": "ComputeUnit.CPU_AND_NE",
187
+ "examples": 47,
188
+ "latency_ms_median": 1.3158749788999557,
189
+ "latency_ms_p95": 1.4334581792354584,
190
  "mismatches_vs_torch": 0,
191
  "parity_with_torch": 1.0,
192
  "per_action": {
 
199
  "n": 3
200
  },
201
  "fill": {
202
+ "acc": 1.0,
203
  "n": 29
204
  },
205
  "skip": {
206
+ "acc": 1.0,
207
  "n": 12
208
  }
209
  },
210
+ "silent_skip_rate_of_fills": 0.0,
211
+ "skipped_when_fill_expected": 0,
212
+ "top1": 1.0
 
213
  },
214
+ "package_bytes": 806125,
215
  "synthetic_test__ane": {
216
  "compute_units": "ComputeUnit.CPU_AND_NE",
217
+ "examples": 29836,
218
+ "latency_ms_median": 1.3136658817529678,
219
+ "latency_ms_p95": 1.4113341458141804,
220
+ "mismatches_vs_torch": 13,
221
+ "parity_with_torch": 0.9995642847566698,
222
  "per_action": {
223
  "check": {
224
+ "acc": 1.0,
225
+ "n": 855
226
  },
227
  "click": {
228
+ "acc": 1.0,
229
+ "n": 1009
230
  },
231
  "fill": {
232
+ "acc": 0.990102586331455,
233
+ "n": 13842
234
  },
235
  "skip": {
236
+ "acc": 0.994762915782024,
237
+ "n": 14130
238
  }
239
  },
240
+ "silent_skip_rate_of_fills": 7.224389539083947e-05,
241
+ "skipped_when_fill_expected": 1,
242
+ "top1": 0.992928006435179
 
243
  }
244
  }
245
  }
eval/results-pytorch.json CHANGED
@@ -1,147 +1,11 @@
1
  {
2
- "device": "mps",
3
- "reference": {
4
- "checkpoint": "/tmp/cua1ckpt/cua-s1-forms.safetensors",
5
- "checkpoint_bytes": 2828784,
6
- "config": {
7
- "context_tokens": 224,
8
- "encoder": "tinyx",
9
- "heads": 4,
10
- "hf_model": "Qwen/Qwen2.5-0.5B",
11
- "layers": 2,
12
- "option_tokens": 96,
13
- "rank": 128,
14
- "width": 128
15
- },
16
- "label": "cua-s1-forms-english",
17
- "sv_handwritten_demo": {
18
- "action_mix": {
19
- "check": 3,
20
- "click": 3,
21
- "fill": 32,
22
- "skip": 12
23
- },
24
- "ece": 0.660977,
25
- "examples": 50,
26
- "majority_baseline": 0.64,
27
- "per_action": {
28
- "check": {
29
- "acc": 0.66667,
30
- "n": 3
31
- },
32
- "click": {
33
- "acc": 0.33333,
34
- "n": 3
35
- },
36
- "fill": {
37
- "acc": 0.15625,
38
- "n": 32
39
- },
40
- "skip": {
41
- "acc": 0.16667,
42
- "n": 12
43
- }
44
- },
45
- "skipped_when_fill_expected": 16,
46
- "top1": 0.2
47
- },
48
- "sv_handwritten_demo__shuffled_context": {
49
- "action_mix": {
50
- "check": 3,
51
- "click": 3,
52
- "fill": 32,
53
- "skip": 12
54
- },
55
- "ece": 0.760258,
56
- "examples": 50,
57
- "majority_baseline": 0.64,
58
- "per_action": {
59
- "check": {
60
- "acc": 0.66667,
61
- "n": 3
62
- },
63
- "click": {
64
- "acc": 0.0,
65
- "n": 3
66
- },
67
- "fill": {
68
- "acc": 0.0,
69
- "n": 32
70
- },
71
- "skip": {
72
- "acc": 0.25,
73
- "n": 12
74
- }
75
- },
76
- "skipped_when_fill_expected": 13,
77
- "top1": 0.1
78
- },
79
- "sv_synthetic_test": {
80
- "action_mix": {
81
- "check": 58,
82
- "click": 79,
83
- "fill": 1010,
84
- "skip": 1168
85
- },
86
- "ece": 0.640725,
87
- "examples": 2315,
88
- "majority_baseline": 0.50454,
89
- "per_action": {
90
- "check": {
91
- "acc": 0.93103,
92
- "n": 58
93
- },
94
- "click": {
95
- "acc": 0.26582,
96
- "n": 79
97
- },
98
- "fill": {
99
- "acc": 0.05545,
100
- "n": 1010
101
- },
102
- "skip": {
103
- "acc": 0.31164,
104
- "n": 1168
105
- }
106
- },
107
- "skipped_when_fill_expected": 371,
108
- "top1": 0.21382
109
- },
110
- "sv_synthetic_test__shuffled_context": {
111
- "action_mix": {
112
- "check": 58,
113
- "click": 79,
114
- "fill": 1010,
115
- "skip": 1168
116
- },
117
- "ece": 0.679541,
118
- "examples": 2315,
119
- "majority_baseline": 0.50454,
120
- "per_action": {
121
- "check": {
122
- "acc": 0.60345,
123
- "n": 58
124
- },
125
- "click": {
126
- "acc": 0.06329,
127
- "n": 79
128
- },
129
- "fill": {
130
- "acc": 0.01782,
131
- "n": 1010
132
- },
133
- "skip": {
134
- "acc": 0.29709,
135
- "n": 1168
136
- }
137
- },
138
- "skipped_when_fill_expected": 363,
139
- "top1": 0.17495
140
- },
141
- "trainable_params": 706048
142
  },
143
- "sv": {
144
- "checkpoint": "runs/sv-tinyx/model/model.safetensors",
 
145
  "checkpoint_bytes": 2828784,
146
  "config": {
147
  "context_tokens": 224,
@@ -152,15 +16,14 @@
152
  "rank": 128,
153
  "width": 128
154
  },
155
- "label": "swedish-specialist",
156
- "sv_handwritten_demo": {
157
  "action_mix": {
158
  "check": 3,
159
  "click": 3,
160
  "fill": 32,
161
  "skip": 12
162
  },
163
- "ece": 0.09176,
164
  "examples": 50,
165
  "majority_baseline": 0.64,
166
  "per_action": {
@@ -173,25 +36,25 @@
173
  "n": 3
174
  },
175
  "fill": {
176
- "acc": 0.8125,
177
  "n": 32
178
  },
179
  "skip": {
180
- "acc": 0.91667,
181
  "n": 12
182
  }
183
  },
184
- "skipped_when_fill_expected": 3,
185
- "top1": 0.86
186
  },
187
- "sv_handwritten_demo__shuffled_context": {
188
  "action_mix": {
189
  "check": 3,
190
  "click": 3,
191
  "fill": 32,
192
  "skip": 12
193
  },
194
- "ece": 0.785789,
195
  "examples": 50,
196
  "majority_baseline": 0.64,
197
  "per_action": {
@@ -212,70 +75,71 @@
212
  "n": 12
213
  }
214
  },
215
- "skipped_when_fill_expected": 6,
216
  "top1": 0.06
217
  },
218
- "sv_synthetic_test": {
 
219
  "action_mix": {
220
- "check": 58,
221
- "click": 79,
222
- "fill": 1010,
223
- "skip": 1168
224
- },
225
- "ece": 0.016565,
226
- "examples": 2315,
227
- "majority_baseline": 0.50454,
228
  "per_action": {
229
  "check": {
230
- "acc": 0.98276,
231
- "n": 58
232
  },
233
  "click": {
234
- "acc": 0.93671,
235
- "n": 79
236
  },
237
  "fill": {
238
- "acc": 0.75545,
239
- "n": 1010
240
  },
241
  "skip": {
242
- "acc": 0.88014,
243
- "n": 1168
244
  }
245
  },
246
- "skipped_when_fill_expected": 76,
247
- "top1": 0.83024
248
  },
249
- "sv_synthetic_test__shuffled_context": {
250
  "action_mix": {
251
- "check": 58,
252
- "click": 79,
253
- "fill": 1010,
254
- "skip": 1168
255
- },
256
- "ece": 0.497346,
257
- "examples": 2315,
258
- "majority_baseline": 0.50454,
259
  "per_action": {
260
  "check": {
261
- "acc": 0.15517,
262
- "n": 58
263
  },
264
  "click": {
265
  "acc": 0.0,
266
- "n": 79
267
  },
268
  "fill": {
269
- "acc": 0.01287,
270
- "n": 1010
271
  },
272
  "skip": {
273
- "acc": 0.65668,
274
- "n": 1168
275
  }
276
  },
277
- "skipped_when_fill_expected": 264,
278
- "top1": 0.34082
279
  },
280
  "trainable_params": 706048
281
  }
 
1
  {
2
+ "datasets": {
3
+ "handwritten_demo": "/Users/hermes-tool/builder-work/one-pass-specialists-67k19_tm/data/sv-10000/demo-handwritten.jsonl",
4
+ "synthetic_test": "/Users/hermes-tool/builder-work/one-pass-specialists-67k19_tm/data/sv-10000/test.jsonl"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5
  },
6
+ "device": "mps",
7
+ "specialist": {
8
+ "checkpoint": "/Users/hermes-tool/builder-work/one-pass-specialists-67k19_tm/runs/sv-tinyx-10000/model/model.safetensors",
9
  "checkpoint_bytes": 2828784,
10
  "config": {
11
  "context_tokens": 224,
 
16
  "rank": 128,
17
  "width": 128
18
  },
19
+ "handwritten_demo": {
 
20
  "action_mix": {
21
  "check": 3,
22
  "click": 3,
23
  "fill": 32,
24
  "skip": 12
25
  },
26
+ "ece": 0.000869,
27
  "examples": 50,
28
  "majority_baseline": 0.64,
29
  "per_action": {
 
36
  "n": 3
37
  },
38
  "fill": {
39
+ "acc": 1.0,
40
  "n": 32
41
  },
42
  "skip": {
43
+ "acc": 1.0,
44
  "n": 12
45
  }
46
  },
47
+ "skipped_when_fill_expected": 0,
48
+ "top1": 1.0
49
  },
50
+ "handwritten_demo__shuffled_context": {
51
  "action_mix": {
52
  "check": 3,
53
  "click": 3,
54
  "fill": 32,
55
  "skip": 12
56
  },
57
+ "ece": 0.819131,
58
  "examples": 50,
59
  "majority_baseline": 0.64,
60
  "per_action": {
 
75
  "n": 12
76
  }
77
  },
78
+ "skipped_when_fill_expected": 3,
79
  "top1": 0.06
80
  },
81
+ "label": "specialist",
82
+ "synthetic_test": {
83
  "action_mix": {
84
+ "check": 855,
85
+ "click": 1009,
86
+ "fill": 13844,
87
+ "skip": 14131
88
+ },
89
+ "ece": 0.001373,
90
+ "examples": 29839,
91
+ "majority_baseline": 0.47357,
92
  "per_action": {
93
  "check": {
94
+ "acc": 1.0,
95
+ "n": 855
96
  },
97
  "click": {
98
+ "acc": 1.0,
99
+ "n": 1009
100
  },
101
  "fill": {
102
+ "acc": 0.99003,
103
+ "n": 13844
104
  },
105
  "skip": {
106
+ "acc": 0.99476,
107
+ "n": 14131
108
  }
109
  },
110
+ "skipped_when_fill_expected": 1,
111
+ "top1": 0.9929
112
  },
113
+ "synthetic_test__shuffled_context": {
114
  "action_mix": {
115
+ "check": 855,
116
+ "click": 1009,
117
+ "fill": 13844,
118
+ "skip": 14131
119
+ },
120
+ "ece": 0.607719,
121
+ "examples": 29839,
122
+ "majority_baseline": 0.47357,
123
  "per_action": {
124
  "check": {
125
+ "acc": 0.20936,
126
+ "n": 855
127
  },
128
  "click": {
129
  "acc": 0.0,
130
+ "n": 1009
131
  },
132
  "fill": {
133
+ "acc": 0.00079,
134
+ "n": 13844
135
  },
136
  "skip": {
137
+ "acc": 0.66209,
138
+ "n": 14131
139
  }
140
  },
141
+ "skipped_when_fill_expected": 3774,
142
+ "top1": 0.31992
143
  },
144
  "trainable_params": 706048
145
  }
eval/size-sweep.jsonl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ {"checkpoint": "runs/sv-tinyx-v2/model", "demo_top1": 0.76, "episodes": 900, "epochs": 4, "note": "900-point: corrected generator, 4 epochs, seed 2026", "shuffled_top1": 0.33203, "test_ece": 0.021596, "test_majority": 0.48874, "test_silent_skips": 127, "test_top1": 0.771}
2
+ {"checkpoint": "/Users/hermes-tool/builder-work/one-pass-specialists-67k19_tm/runs/sv-tinyx-4000/model", "demo_top1": 1.0, "episodes": 4000, "epochs": 4, "rows": {"train": 94405}, "seconds": 3376.7, "shuffled_top1": 0.31568, "test_ece": 0.001389, "test_majority": 0.47127, "test_silent_skips": 6, "test_top1": 0.98944}
3
+ {"checkpoint": "/Users/hermes-tool/builder-work/one-pass-specialists-67k19_tm/runs/sv-tinyx-10000/model", "demo_top1": 1.0, "episodes": 10000, "epochs": 4, "rows": {"train": 234921}, "seconds": 9763.0, "shuffled_top1": 0.31992, "test_ece": 0.001373, "test_majority": 0.47357, "test_silent_skips": 1, "test_top1": 0.9929}
sv0-forms.json CHANGED
@@ -13,142 +13,142 @@
13
  "metadata": {
14
  "batch_size": 64,
15
  "best_validation": {
16
- "ece": 0.018766840075841174,
17
- "examples": 2855,
18
- "nll": 0.51966637646463,
19
  "per_action": {
20
  "check": {
21
  "acc": 1.0,
22
- "n": 87
23
  },
24
  "click": {
25
- "acc": 0.9479166666666666,
26
- "n": 96
27
  },
28
  "fill": {
29
- "acc": 0.7756680731364276,
30
- "n": 1422
31
  },
32
  "skip": {
33
- "acc": 0.8712,
34
- "n": 1250
35
  }
36
  },
37
- "top1": 0.8301225900650024
38
  },
39
  "deterministic": false,
40
  "epochs": 4,
41
  "history": [
42
  {
43
  "epoch": 1,
44
- "train_nll": 2.060510016020325,
45
  "validation": {
46
- "ece": 0.05491860159418138,
47
- "examples": 2855,
48
- "nll": 1.748936438351713,
49
  "per_action": {
50
  "check": {
51
- "acc": 0.4367816091954023,
52
- "n": 87
53
  },
54
  "click": {
55
- "acc": 0.3958333333333333,
56
- "n": 96
57
  },
58
  "fill": {
59
- "acc": 0.06118143459915612,
60
- "n": 1422
61
  },
62
  "skip": {
63
- "acc": 0.9712,
64
- "n": 1250
65
  }
66
  },
67
- "top1": 0.4823117256164551
68
  }
69
  },
70
  {
71
  "epoch": 2,
72
- "train_nll": 1.3498624871227647,
73
  "validation": {
74
- "ece": 0.029052662350295577,
75
- "examples": 2855,
76
- "nll": 1.1316383522153945,
77
  "per_action": {
78
  "check": {
79
- "acc": 0.9770114942528736,
80
- "n": 87
81
  },
82
  "click": {
83
- "acc": 0.8854166666666666,
84
- "n": 96
85
  },
86
  "fill": {
87
- "acc": 0.4212376933895921,
88
- "n": 1422
89
  },
90
  "skip": {
91
- "acc": 0.8232,
92
- "n": 1250
93
  }
94
  },
95
- "top1": 0.6297723054885864
96
  }
97
  },
98
  {
99
  "epoch": 3,
100
- "train_nll": 0.7656327178699136,
101
  "validation": {
102
- "ece": 0.02394736194401048,
103
- "examples": 2855,
104
- "nll": 0.6415376866970296,
105
  "per_action": {
106
  "check": {
107
- "acc": 0.9770114942528736,
108
- "n": 87
109
  },
110
  "click": {
111
- "acc": 0.9791666666666666,
112
- "n": 96
113
  },
114
  "fill": {
115
- "acc": 0.7088607594936709,
116
- "n": 1422
117
  },
118
  "skip": {
119
- "acc": 0.8464,
120
- "n": 1250
121
  }
122
  },
123
- "top1": 0.7863397598266602
124
  }
125
  },
126
  {
127
  "epoch": 4,
128
- "train_nll": 0.4496109453594249,
129
  "validation": {
130
- "ece": 0.018766840075841174,
131
- "examples": 2855,
132
- "nll": 0.51966637646463,
133
  "per_action": {
134
  "check": {
135
  "acc": 1.0,
136
- "n": 87
137
  },
138
  "click": {
139
- "acc": 0.9479166666666666,
140
- "n": 96
141
  },
142
  "fill": {
143
- "acc": 0.7756680731364276,
144
- "n": 1422
145
  },
146
  "skip": {
147
- "acc": 0.8712,
148
- "n": 1250
149
  }
150
  },
151
- "top1": 0.8301225900650024
152
  }
153
  }
154
  ],
@@ -158,5 +158,5 @@
158
  "warmup": 0.05,
159
  "workers": 0
160
  },
161
- "state_signature": "86e836863df8a0b0caa34ac5eab18bcd4fb44e420f83e271c96379fac0b0aec4"
162
  }
 
13
  "metadata": {
14
  "batch_size": 64,
15
  "best_validation": {
16
+ "ece": 0.0011067466822396455,
17
+ "examples": 29649,
18
+ "nll": 0.014722759442557139,
19
  "per_action": {
20
  "check": {
21
  "acc": 1.0,
22
+ "n": 833
23
  },
24
  "click": {
25
+ "acc": 1.0,
26
+ "n": 1007
27
  },
28
  "fill": {
29
+ "acc": 0.9877524709926945,
30
+ "n": 13962
31
  },
32
  "skip": {
33
+ "acc": 0.9952336246118293,
34
+ "n": 13847
35
  }
36
  },
37
+ "top1": 0.9920064806938171
38
  },
39
  "deterministic": false,
40
  "epochs": 4,
41
  "history": [
42
  {
43
  "epoch": 1,
44
+ "train_nll": 0.6810737938714119,
45
  "validation": {
46
+ "ece": 0.0038536921401828295,
47
+ "examples": 29649,
48
+ "nll": 0.10877726682664057,
49
  "per_action": {
50
  "check": {
51
+ "acc": 0.9867947178871549,
52
+ "n": 833
53
  },
54
  "click": {
55
+ "acc": 1.0,
56
+ "n": 1007
57
  },
58
  "fill": {
59
+ "acc": 0.9732846297092107,
60
+ "n": 13962
61
  },
62
  "skip": {
63
+ "acc": 0.9447533761825666,
64
+ "n": 13847
65
  }
66
  },
67
+ "top1": 0.9612466096878052
68
  }
69
  },
70
  {
71
  "epoch": 2,
72
+ "train_nll": 0.08150138849369405,
73
  "validation": {
74
+ "ece": 0.004962782920756581,
75
+ "examples": 29649,
76
+ "nll": 0.04922109633023761,
77
  "per_action": {
78
  "check": {
79
+ "acc": 1.0,
80
+ "n": 833
81
  },
82
  "click": {
83
+ "acc": 0.9940417080436942,
84
+ "n": 1007
85
  },
86
  "fill": {
87
+ "acc": 0.9852456668099127,
88
+ "n": 13962
89
  },
90
  "skip": {
91
+ "acc": 0.9790568354156135,
92
+ "n": 13847
93
  }
94
  },
95
+ "top1": 0.983068585395813
96
  }
97
  },
98
  {
99
  "epoch": 3,
100
+ "train_nll": 0.02742721090312225,
101
  "validation": {
102
+ "ece": 0.0023602779376687977,
103
+ "examples": 29649,
104
+ "nll": 0.01792668065080643,
105
  "per_action": {
106
  "check": {
107
+ "acc": 1.0,
108
+ "n": 833
109
  },
110
  "click": {
111
+ "acc": 1.0,
112
+ "n": 1007
113
  },
114
  "fill": {
115
+ "acc": 0.988110585875949,
116
+ "n": 13962
117
  },
118
  "skip": {
119
+ "acc": 0.9944392287138009,
120
+ "n": 13847
121
  }
122
  },
123
+ "top1": 0.9918041229248047
124
  }
125
  },
126
  {
127
  "epoch": 4,
128
+ "train_nll": 0.01454558765468025,
129
  "validation": {
130
+ "ece": 0.0011067466822396455,
131
+ "examples": 29649,
132
+ "nll": 0.014722759442557139,
133
  "per_action": {
134
  "check": {
135
  "acc": 1.0,
136
+ "n": 833
137
  },
138
  "click": {
139
+ "acc": 1.0,
140
+ "n": 1007
141
  },
142
  "fill": {
143
+ "acc": 0.9877524709926945,
144
+ "n": 13962
145
  },
146
  "skip": {
147
+ "acc": 0.9952336246118293,
148
+ "n": 13847
149
  }
150
  },
151
+ "top1": 0.9920064806938171
152
  }
153
  }
154
  ],
 
158
  "warmup": 0.05,
159
  "workers": 0
160
  },
161
+ "state_signature": "7c37ee78ca9c522d7bc0470eb8b4294f35bbf48246197677fe7745972a09824e"
162
  }
sv0-forms.safetensors CHANGED
@@ -1,3 +1,3 @@
1
  version https://git-lfs.github.com/spec/v1
2
- oid sha256:b9030d7a7b7abfaf70dd1cc2a390568eaa3a55849daa0757b60d01dbab162356
3
  size 2828784
 
1
  version https://git-lfs.github.com/spec/v1
2
+ oid sha256:4f35bfac96dd23c058dfc098986c3f4cff39b836a177fb60e026b5f06c2ba782
3
  size 2828784