cua-ai/cua-s1-forms

Dataset

cua-s1-forms (dataset)

8

7 commits

1 linked in READMEs

updated Sep 18, 2026

See the code
computer-use
form-filling
system-one

README

cua-s1-forms (dataset)

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.

Files

filerowssource
train.jsonl~150ksynthetic
validation.jsonl~18ksynthetic
test.jsonl~20ksynthetic, form-signature-disjoint from train/validation
demo.jsonl196real: 3 real JevBrowser form pages x 3 real demo PDFs, nothing synthetic

Format

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>).

How it was built

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.

License

MIT. The underlying synthetic values (names, addresses, etc.) are procedurally generated, not drawn from any real individual's data.

Contributors

ddupont

7 commits

cua-ai/cua-s1-forms

Dataset

cua-s1-forms (dataset)

8

7 commits

1 linked in READMEs

updated Sep 18, 2026

See the code
computer-use
form-filling
system-one

README

cua-s1-forms (dataset)

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.

Files

filerowssource
train.jsonl~150ksynthetic
validation.jsonl~18ksynthetic
test.jsonl~20ksynthetic, form-signature-disjoint from train/validation
demo.jsonl196real: 3 real JevBrowser form pages x 3 real demo PDFs, nothing synthetic

Format

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>).

How it was built

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.

License

MIT. The underlying synthetic values (names, addresses, etc.) are procedurally generated, not drawn from any real individual's data.

Contributors

ddupont

7 commits