-
-
A bank statement: verified fields, and a closing balance left blank with the reason when the sums do not add up
-
Agenda: every bill, deadline and statement found in the papers, on its day, computed by code
-
Your papers. Your laptop. A small Swiss model.
-
The month's report: tables by code, one sentence by Apertus, every number checked
Inspiration
Swiss papers carry their own truth: a QR-bill encodes the amount, the IBAN and a reference with a check digit; a bank statement must add up; a letter from the canton names a deadline. Language models read these papers well and still invent figures. We wanted the opposite: a small Swiss model on an ordinary laptop, and a figure that is either proven or blank.
What it does
Drop a folder of Swiss papers (QR-bills, bank statements, official letters, in French, German or Italian). Apertus 1.5 reads the words; plain code decodes the QR, checks every checksum, redoes every sum and compares every date. Each figure points back to its paper, and anything the code cannot confirm stays blank with the reason. On top: an Agenda of every event found in the papers (a real calendar: what to pay this week, overdue, deadlines, balances) with a calendar export for reminders, the month's report in four languages, and questions answered with the paper cited. Nothing leaves the machine.
How we built it
Python, FastAPI, PyMuPDF, zxing-cpp, a Swiss QR-bill parser written for this, SQLite FTS5, one Docker container (make run). Apertus 1.5 8B served locally (8-bit MLX) and 70B on Infomaniak's Swiss cloud, through the same three OpenAI-compatible variables. 100 synthetic Swiss papers with ground truth and planted traps, 50 questions, baseline versus ours, reproducible with make eval.
Challenges we ran into
Getting the checks right rather than the prompts: statement columns vanish in text extraction, so signs had to be recovered from the printed totals; references on bills without QR had to be decided by code; a small model drops the last digit of an IBAN. Each failure became a rule, not a bigger prompt.
Accomplishments that we're proud of
Apertus alone invents 4.5 % of the figures with the 70B and 8.9 % with the 8B. Papertus invents 0.0 % with both (100 % correct with the 70B, 99.3 % with the 8B, the rest blank with a reason). 50 questions answered by code from verified facts, no model call. 120 tests. Report in English, French, German and Italian.
What we learned
The small model is enough when code does the proving. Sovereignty is a property of the architecture, not of the model size.
What's next for Papertus
OCR for scanned papers, payslips and tax statements (eCH-0196), Swiss open data behind the deadlines, a one-click installer that ships the 8B weights, a public evaluation set on Hugging Face.
Log in or sign up for Devpost to join the conversation.