Spaces:
Sleeping
title: Paper Decoder — Розшифровувач паперів
emoji: 📄
colorFrom: yellow
colorTo: gray
sdk: docker
app_port: 7860
pinned: false
license: apache-2.0
short_description: Ukrainian official-letter decoder for my parents.
tags:
- backyard-ai
- off-the-grid
- llama-cpp
- tiny-titan
Paper Decoder — Розшифровувач паперів
My parents in Uzhhorod receive official Ukrainian letters — utility debt notices, bank letters, tax demands — and "official-looking" scam messages. They can read every word and still not know what the letter wants from them, or whether it's real.
Paper Decoder takes a phone photo or pasted text of a letter and returns:
- a plain-Ukrainian summary (3–4 sentences, no bureaucratese),
- a "what you must do" action list,
- every date, deadline and amount, extracted,
- scam-pattern flags with the matched evidence quoted.
Why a small local model
These letters contain names, addresses, account numbers, debts. Sending them to a cloud API is exactly what I'd tell my parents never to do. Everything runs on this CPU Space: Tesseract OCR (ukr+rus) for the photo path, Qwen3-4B-Instruct-2507 at Q4_K_M served by llama.cpp. No external calls at inference time.
Model selection was gated, not assumed
Before building, three candidate models ran a 10-prompt Ukrainian spot-check on real letter types (scored 0–2 per prompt, blind rubric):
| Model | Score | Verdict |
|---|---|---|
| MiniCPM5-1B (Q4_K_M) | 0/20 | Russian bleed, script corruption, empty outputs |
| Qwen3-1.7B (Q4_K_M) | 11/20 | Fluent Ukrainian, zero scam awareness |
| Qwen3-4B-Instruct-2507 (Q4_K_M) | 14/20 | Pass — shipped |
A fine-tuned LoRA targeting the remaining failure modes (protective actions on scam letters, date fidelity in summaries) is in progress; the before/after eval will be published with the model.
Built solo by aleks-gotsa for the Build Small Hackathon 2026, Backyard AI track.