{
  "_export": {
    "what": "Curated summary of the measurement run behind TypelessForm’s published extraction-accuracy figure.",
    "method_page": "https://typelessform.com/blog/how-accurate-is-voice-form-filling-2026/",
    "license": {
      "name": "CC BY 4.0",
      "url": "https://creativecommons.org/licenses/by/4.0/",
      "attribution": "TypelessForm / Webappski. Reuse and quote freely with attribution and a link to the method page."
    },
    "exported_on": "2026-09-21",
    "corpus": "typelessform-accuracy-corpus-v2.json",
    "not_included": "The per-cell verdicts and the raw model responses stay internal. The totals below are computed from them and are scored by a published, deterministic rule set (see the corpus `scoring` and `normalization` blocks)."
  },
  "headline": "98.5% of spoken discrete fields filled correctly from a correct transcript (n=195 observations, ±1.73 pp, 3 forms, en/ru/de, measured 2026-09-21, extraction gpt-5.4-mini, transcription none (text leg)). Fabrications on unspoken fields: 0 of 48. Method: https://typelessform.com/blog/how-accurate-is-voice-form-filling-2026/",
  "measured": {
    "figure_pct": 98.5,
    "figure_means": "Of the discrete fields a speaker actually named, the share that ended up holding the right value.",
    "observations": 195,
    "binomial_ci_half_width_pp": 1.73,
    "binomial_ci_derivation": "Normal approximation at 95%: 1.96 * sqrt(p * (1 - p) / n), p = 192/195, n = 195.",
    "passes": 3,
    "per_pass_pct": [
      98.5,
      98.5,
      98.5
    ],
    "spread_pp": 0,
    "fabrications_on_unspoken_fields": "0 of 48",
    "derivable_cells": {
      "count": 3,
      "filled_per_pass": [
        1,
        2,
        2
      ],
      "rule": "Not named outright, but legitimately derivable from what was said. Counted in neither the accuracy figure nor the fabrication figure, and reported on its own line.",
      "under_corpus_v1": "These three were plain unspoken cells in corpus v1. Scored by the v1 rule, the same runs read 1-2 of 51 instead of 0 of 48."
    },
    "clean_forms": "24 of 27",
    "run_date": "2026-09-21",
    "corpus_version": "2.0"
  },
  "conditions": {
    "leg": "A — text to fields. The corpus utterances are fed to the extraction pipeline as correct transcripts.",
    "extraction_model": "gpt-5.4-mini",
    "transcription_model": "none (text leg)",
    "normalization_version": "2.0",
    "prompt_file_sha256": {
      "extraction-prompt.ts": "704acdcc0d90920d",
      "extraction-examples.ts": "82d6feec34194c66",
      "extraction-field-rules.ts": "7137caeda7fc1bc6",
      "extraction-datetime-rules.ts": "4c5aca6d25212f0c"
    },
    "frozen_context": {
      "userTodayLocal": "2026-10-05",
      "userTodayWeekday": "Monday",
      "userTimeZone": "Europe/Warsaw",
      "why": "Относительные даты ('в эту пятницу', 'через две недели во вторник') без замороженного 'сегодня' меняют эталон сами собой при повторе через месяц — это выглядело бы регрессией, не будучи ею. Передаётся в запрос ЯВНО (handler.ts читает userTodayLocal/userTimeZone из тела)."
    }
  },
  "failures": {
    "by_field_pooled": {
      "phone": 4,
      "visitType": 3,
      "painPattern": 2
    },
    "by_class_pooled": {
      "E1": 7,
      "E2": 2
    },
    "classes": "The error classes are defined in the corpus `scoring` block."
  },
  "not_measured": [
    "End-to-end accuracy from spoken audio to filled form. Speech recognition is not inside this figure.",
    "Speech-recognition accuracy itself. We publish no number for it, ours or a vendor’s.",
    "Free-text fields (message, complaint, allergies). Those 45 cells are judged by hand and are not in this figure.",
    "Latency. Our own timings are extraction-only on a developer machine and say nothing about a visitor’s device or network."
  ],
  "provenance": {
    "remeasured_on_corpus_v2": [
      "ru-contact-v1",
      "ru-contact-v2",
      "ru-dental-v1",
      "ru-dental-v2",
      "ru-hotel-v1",
      "ru-hotel-v2"
    ],
    "carried_over_from_the_v1_run": [
      "de-contact-v1",
      "de-contact-v2",
      "de-contact-v3",
      "de-dental-v1",
      "de-dental-v2",
      "de-dental-v3",
      "de-hotel-v1",
      "de-hotel-v2",
      "de-hotel-v3",
      "en-contact-v1",
      "en-contact-v2",
      "en-contact-v3",
      "en-dental-v1",
      "en-dental-v2",
      "en-dental-v3",
      "en-hotel-v1",
      "en-hotel-v2",
      "en-hotel-v3",
      "ru-contact-v3",
      "ru-dental-v3",
      "ru-hotel-v3"
    ],
    "why_carrying_over_is_sound": "Verified by hashing rather than asserted: the utterances of all 21 carried-over scripts are byte-identical between corpus v1 and v2, and the extraction prompt did not change between the runs — the prompt file hashes above pin that. What IS carried over is the model output; every cell was then re-scored against the v2 expected values, which matters because v2 did change the expected values of three of these scripts (the `subject` of the scattered contact utterance, reclassified as derivable — see `measured.derivable_cells`)."
  }
}
