← Selected work

KAMIWAZA

Turn a photographed form into an application.

See how a form becomes an app ↓
  • TypeScript
  • React
  • Next.js
How it is built
AppSpec / JSON
Describes the fields, tables and records read from a form.
React
Renders that specification as an editable application.
TypeScript / Next.js
Defines the data types and connects the screen to the analysis API.
On this page
Evaluation & source

AI HACKATHON 2026 TOKYO · Finalist · 56 teams

Give the model a structure the app can check

The photograph becomes a description of fields and records. The application checks that structure, then builds the screen.

Select a stage to follow the diagram. This is an illustration, not a live extraction.

Schema validity and factual accuracy are separate checks.
How it works & what was checked

The model produces AppSpec, a JSON description of the application. AppSpec defines field types, table columns, the first record and its line items. React components interpret that description through a fixed renderer. This boundary was present in the initial implementation; it was an architectural choice from the beginning.

The application checks the completed output against its schema, including permitted keys and value types. It also rejects an empty application name or a spec with no fields. These checks happen after generation finishes, because a partially received object is naturally incomplete. A valid object still needs factual review: a schema can recognize that a field contains a number, but it cannot establish that the number was read correctly from the paper.

Changes stay inside the same boundary

After generation, a text instruction can request a change through SpecDiff. Its operation set includes adding a field, renaming one, setting a numeric limit, and adding an approval-step definition. The model selects among the supported operations; a deterministic reducer applies them to the existing spec. Rejected changes return the original spec. The application retains control of how an operation changes the interface.

Reading uncertainty has its own path. The live code finds the first field whose reported confidence is below its threshold and asks whether to include it. That question is an opportunity for human review, not evidence that the confidence number has been calibrated. Source boxes can show the region associated with a field, but their accuracy on live photographs was not quantitatively evaluated.

Correct values do not guarantee a complete document

Read the value counts and document verdicts together. Correct extracted values do not establish that a document is complete.

Two recorded evaluations of the same 50 documents
Recorded metricv1v2
Documents passing the rubric38 / 5048 / 50
Partial / failed11 / 12 / 0
Values scored correct704 / 7071,516 / 1,518
Values marked as fabricated00
A recount of retained LLM grades. The original images are unavailable; this is not a fresh extraction or regrading.
How it works & what was checked

The first recorded evaluation scored 704 of 707 extracted values as correct. Yet only 38 of 50 documents received a successful verdict. Eleven were partial, and one live analysis fell back to demo data and was counted as a failure. The high value score concealed an important limitation: information that never reaches the extracted record cannot be recovered by checking only the values that did.

Repeated line items exposed that gap. The original representation was largely flat; the evaluation notes report that later rows were often omitted. The next version added a table definition and an array of rows. Output allowance and instructions for reading decimal separators also changed, so this was an engineering revision involving several changes. Its results cannot isolate the effect of the data-model change alone.

Read both passes together

Compare the two retained evaluations of the same 50 documents. These are saved grades, not a new extraction test.

50 / 50

Recorded verdict and value agreement for each case

Casev1v2v1 valuesv2 values
K01PartialPass17 / 1736 / 36
K02PassPass9 / 933 / 33
K03PartialPass11 / 1148 / 48
K04PassPass10 / 1013 / 13
K05PartialPass9 / 920 / 20
K06PartialPass14 / 1435 / 35
K07PassPass13 / 1315 / 15
K08PartialPass19 / 19112 / 112
K09PassPass4 / 44 / 4
K10PartialPass16 / 16124 / 124
K11PassPass24 / 2451 / 51
K12PassPass26 / 2668 / 69
K13PassPass21 / 2159 / 59
K14PassPass23 / 2335 / 35
K15PassPass22 / 2241 / 41
K16PartialPass23 / 2465 / 65
K17PassPass21 / 2156 / 56
K18PassPass26 / 2635 / 35
K19PassPartial23 / 2341 / 41
K20PassPass22 / 2226 / 26
K21PassPass14 / 1416 / 16
K22PassPass13 / 1315 / 15
K23PassPass14 / 1418 / 18
K24PassPass14 / 1416 / 16
K25PassPass14 / 1416 / 16
K26PassPass10 / 1033 / 33
K27PassPass14 / 1420 / 20
K28PassPass13 / 1315 / 15
K29PassPass15 / 1520 / 20
K30PassPass15 / 1520 / 20
K31PassPass9 / 913 / 13
K32PassPass9 / 910 / 10
K33PassPass9 / 913 / 13
K34PassPass9 / 913 / 13
K35PassPass9 / 914 / 14
K36PassPass9 / 911 / 11
K37PartialPartial8 / 910 / 11
K38PassPass9 / 912 / 12
K39PassPass9 / 910 / 10
K40PartialPass8 / 912 / 12
K41PartialPass5 / 560 / 60
K42PassPass14 / 1444 / 44
K43FailPassNot evaluated17 / 17
K44PassPass15 / 1522 / 22
K45PassPass18 / 1835 / 35
K46PassPassNot evaluatedNot evaluated
K47PassPass20 / 2022 / 22
K48PartialPass16 / 1636 / 36
K49PassPass21 / 2122 / 22
K50PassPass18 / 1834 / 34
Pass is the stored rubric verdict, not a promise that every field is correct. Case IDs omit document names and contents. CSV ↓ · JSON ↓
How it works & what was checked

The retained v2 grades record 48 rubric passes, two partial results and no failed documents. They score 1,516 of 1,518 values as correct and record 196 expected and 196 extracted line items. Pairing the cases shows ten partial results and the failed run becoming successful. It also shows one regression from success to partial. That regression belongs in the comparison.

“Pass” means the stored rubric verdict. It does not mean every detail was correct: K12 passed with 68 of 69 values scored correct. Conversely, K19 was graded partial despite agreement on all 41 evaluated values, because the document verdict also considered omitted information. The case table preserves both columns so readers can see this distinction directly.

What these records establish

No fabricated values were recorded by the LLM graders in either pass. The combined denominator is 2,225 evaluated values across two passes over the same 50 documents. It is not a count of independent tests, and zero recorded detections is not a guarantee that the system cannot invent a value. Agreement between the graders and human reviewers was not measured.

The evaluation is recorded as 6 July 2026 on the direct provider path. The retained verdict files were recounted to produce this table. The original evaluation images are unavailable, and the grader model identifier was not preserved. A reader can recalculate this numerical projection, but cannot use it to regrade the documents or rerun the original set. Its performance figures also cannot be carried over to a different model or routed deployment without a new evaluation.

KAMIWAZA remains a prototype with a defined boundary. Approval steps are displayed as a design, without executing approvals or rejections. Generated data does not persist across reloads. Those gaps separate a working demonstration of the paper-to-application mechanism from a system ready for continuing operational use.

Evidence & method

Verification notes

The model marked no values as fabricated among 707 values in v1 and 1,518 in v2. This is the result for those documents; a rubric pass does not mean every field is correct.

Finalist among 56 teams.

Read the Japanese technical article ↗

In progress

KAMIWAZA cloud implementation

Extending the document-to-application workflow into a cloud implementation.