Skip to content

Add submission for dhyantsoni - #80

Open
dhyantsoni wants to merge 1 commit into
8090-inc:mainfrom
dhyantsoni:submission
Open

Add submission for dhyantsoni#80
dhyantsoni wants to merge 1 commit into
8090-inc:mainfrom
dhyantsoni:submission

Conversation

@dhyantsoni

Copy link
Copy Markdown

Adds submissions/dhyantsoni/ — validation predictions, technical memo, and a link to the solution repository. Nothing outside that folder is touched.

Solution repository: https://github.com/dhyantsoni/mib-doc-challenge/tree/main (Dockerfile at root)

Approach

Every stage asks one question: is this evidence I'm allowed to use?

  • Ink verification. Each text span is checked against the rendered raster; a span that leaves no ink is not evidence. One measurement subsumes white-on-white text, off-crop spans, invisible render modes, and occlusion, rather than a heuristic per trick.
  • Template- and label-anchored extraction. A value is recorded only when a recognised form yields a recognised label followed by a legal value, so a free-floating SYSTEM: ... answer key line has no path into a record field even when printed in visible ink. Binding each field to the templates that print it also stops a barcode payload from fuzzy-matching its way into a waiver code.
  • Evidence ledger with the field manual's precedence order, case-id scoping for multi-applicant packets, and conflicts counted rather than averaged.
  • Dual-mode OCR for the ~47% of pages that arrive as degraded scans, read at three contrast cuts under two segmentation modes and merged.
  • Decision layer: the manual's unambiguous clauses as hard constraints, a regularised model for the residue, and action selection that maximises expected score under the published payoff matrix — which differs from argmax-probability, since a wrong denial costs 0 while a false approval costs −4.

Measurement

Scores are cross-validated, not in-sample. Evaluating the fitted model on its own training packets read 15 points of accuracy too high and understated catastrophic false approvals by 18x; tools/honest_eval.py is the only thing quoted from.

Extraction 41.1 / 50
Classification 65.6 / 80
Calibration 15.8 / 20
Total 122.5 / 150
Held-out adjudication accuracy 81.4%
Runtime 1.36 s per PDF against a 6 s budget

Validation output: 5,000 predictions, all schema-valid, none missing. Runs offline on CPU with no LLM, VLM, or hosted API; the only model artifacts are Tesseract's bundled English data and a classifier under 5 KB trained on the public training split.

The memo covers failure modes and what a further week would go into.

Validation predictions, technical memo, and a link to the solution repository.
The pipeline reads each PDF packet offline, separates visible evidence from the
hidden answer keys the packets carry, and adjudicates on the field manual's
rules under the published scoring payoff.
Copilot AI review requested due to automatic review settings August 4, 2026 03:08

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds a new participant submission under submissions/dhyantsoni/, including the submission landing page and a detailed technical memo describing the approach and reported validation results.

Changes:

  • Added SUBMISSION.md with build/run instructions and a contents inventory pointing to the solution repository.
  • Added MEMO.md documenting the pipeline design, measurement methodology, and failure modes.

Reviewed changes

Copilot reviewed 2 out of 3 changed files in this pull request and generated 1 comment.

File Description
submissions/dhyantsoni/SUBMISSION.md Submission entrypoint with repository link, run commands, and artifact summary.
submissions/dhyantsoni/MEMO.md Technical memo describing the solution approach, evaluation, and known limitations.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

| `mib/extract.py` | template- and label-anchored reading, closed-vocabulary snapping |
| `mib/case.py` | evidence ledger, precedence resolution, case-id scoping |
| `mib/policy.py` | manual rules as constraints, learned residual, expected-utility decision |
| `mib/model.joblib` | the trained residual model and its calibrator (< 1 MiB) |
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants