cua-s1-forms (dataset)
8
7 commits
1 linked in READMEs
updated Sep 18, 2026
Synthetic + real training/eval data for cua-ai/cua-s1-forms,
a jev-like one-pass option scorer for GUI form filling behind
cua-driver.
Generator source: cua_s1/synth.py in
https://github.com/trycua/cua/tree/main/libs/cua-s1.
| file | rows | source |
|---|---|---|
train.jsonl | ~150k | synthetic |
validation.jsonl | ~18k | synthetic |
test.jsonl | ~20k | synthetic, form-signature-disjoint from train/validation |
demo.jsonl | 196 | real: 3 real JevBrowser form pages x 3 real demo PDFs, nothing synthetic |
One JSON object per line:
{"context": "TASK fill the form from the document, then submit\nFORM Northwind Clinic - New Patient Registration\nELEMENT Edit \"Phone number\" value=\"\"",
"options": ["fill Tel: (503) 555-0142", "fill DOB: 03/14/1987", "...", "check", "click", "skip"],
"label": 4,
"meta": {"role": "Edit", "action": "fill"}}
label is the zero-based index into options of the correct choice. options always ends
with the three fixed actions check, click, skip; every option before that is a pointer
to one document entity (fill <entity label>: <entity value>).
Each synthetic row comes from a random "episode": a random form (2–16 fields sampled from a
55-concept catalogue, each concept carrying several form-label and document-label synonyms),
a random synthetic person, and a random document built from that person's data plus
distractor entities and forced look-alike confuser pairs (e.g. email vs street address,
phone number vs emergency contact phone, state vs university) so the model has to
read the whole label rather than pattern-match on a keyword. Window titles get random app
suffixes ( - JevBrowser, - Google Chrome, ...) and are dropped entirely 20% of the time.
Splits are disjoint by the exact sorted set of element descriptions in an episode, so a test
form's field set never appears in training.
demo.jsonl is not generated by the sampler: it comes from the three real JevBrowser page
specs and three real demo PDFs (a referral letter, a résumé, a police incident report),
extracted with pdfplumber and hand-mapped to the correct form field, so it measures actual
transfer rather than in-distribution synthetic accuracy.
MIT. The underlying synthetic values (names, addresses, etc.) are procedurally generated, not drawn from any real individual's data.
7 commits
cua-s1-forms (dataset)
8
7 commits
1 linked in READMEs
updated Sep 18, 2026
Synthetic + real training/eval data for cua-ai/cua-s1-forms,
a jev-like one-pass option scorer for GUI form filling behind
cua-driver.
Generator source: cua_s1/synth.py in
https://github.com/trycua/cua/tree/main/libs/cua-s1.
| file | rows | source |
|---|---|---|
train.jsonl | ~150k | synthetic |
validation.jsonl | ~18k | synthetic |
test.jsonl | ~20k | synthetic, form-signature-disjoint from train/validation |
demo.jsonl | 196 | real: 3 real JevBrowser form pages x 3 real demo PDFs, nothing synthetic |
One JSON object per line:
{"context": "TASK fill the form from the document, then submit\nFORM Northwind Clinic - New Patient Registration\nELEMENT Edit \"Phone number\" value=\"\"",
"options": ["fill Tel: (503) 555-0142", "fill DOB: 03/14/1987", "...", "check", "click", "skip"],
"label": 4,
"meta": {"role": "Edit", "action": "fill"}}
label is the zero-based index into options of the correct choice. options always ends
with the three fixed actions check, click, skip; every option before that is a pointer
to one document entity (fill <entity label>: <entity value>).
Each synthetic row comes from a random "episode": a random form (2–16 fields sampled from a
55-concept catalogue, each concept carrying several form-label and document-label synonyms),
a random synthetic person, and a random document built from that person's data plus
distractor entities and forced look-alike confuser pairs (e.g. email vs street address,
phone number vs emergency contact phone, state vs university) so the model has to
read the whole label rather than pattern-match on a keyword. Window titles get random app
suffixes ( - JevBrowser, - Google Chrome, ...) and are dropped entirely 20% of the time.
Splits are disjoint by the exact sorted set of element descriptions in an episode, so a test
form's field set never appears in training.
demo.jsonl is not generated by the sampler: it comes from the three real JevBrowser page
specs and three real demo PDFs (a referral letter, a résumé, a police incident report),
extracted with pdfplumber and hand-mapped to the correct form field, so it measures actual
transfer rather than in-distribution synthetic accuracy.
MIT. The underlying synthetic values (names, addresses, etc.) are procedurally generated, not drawn from any real individual's data.
7 commits