--- 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: 1. a plain-Ukrainian summary (3–4 sentences, no bureaucratese), 2. a "what you must do" action list, 3. every date, deadline and amount, extracted, 4. 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](https://huggingface.co/aleks-gotsa) for the Build Small Hackathon 2026, Backyard AI track.