The Gemma 4 Good Hackathon · Special Technology Track · llama.cpp prize
PreVillage
Built by Ashish Thapa
A navigator for Nepal’s government services with source retrieval in the public code. The claimed corpus size and private Gemma fine-tune could not be confirmed; voice transcription defaults to Gemini, and the live helpdesk timed out.
I also participated in this hackathon with Memory Moment. This coverage was prepared independently after results were announced.
The idea worth stealing
Government facts should never be memorized into weights.
Contacts, fees, and office holders change, so PreVillage’s writeup describes a crawled corpus of 1,071 sources and a Gemma 4 role focused on: repairing noisy Nepali and Roman-Nepali input, deciding whether a question is about a route, a fee, or a form, and composing an answer that cites source IDs. The builder reports learning this by failing: continued pretraining on Nepali text broke chat behaviour, and a fine-tune with a beautiful loss curve invented a phone number. The builder describes training on planner JSON and evidence packs; the private adapter could not be checked.
What we checked
Date checked: .
Public repository at the submission revision, Kaggle writeup, and linked artifacts; code was read, not executed. Deployment checks and limits are described below.
Labels apply to each finding and the evidence described, not to the project as a whole.
Not independently verified means the available evidence was insufficient to confirm a claim. It does not mean the claim is false.
-
Retrieval is SQLite FTS5
Verified
The server reads the crawler’s SQLite database and ranks chunks with FTS5 BM25, rebuilding the index on demand; a comment notes the chunks are about 90 percent Devanagari. Source
-
The corpus and the fine-tune are not public
Not independently verified
272,718 chunks appears as interface copy; the repository ships a 1,067-line source registry. The adapter the server loads returns 401, and the Hugging Face collection holds only the TTS voice. Source
What we need: Access to the corpus snapshot and private adapter, with a chunk-count query and the deployed model revision.
-
Voice defaults to Gemini
Inconsistent
VOICE_ASR_PROVIDER defaults to vertex, which transcribes with gemini-2.5-flash; the Nepali FastConformer is an alternative provider. The writeup says local workers where possible. Source
What we need: The deployed voice-provider configuration and a transcription trace, or a description naming Gemini as the default.
Under the hood
- A Rust crawler with 191 tests
- The corpus is built by a Rust crate with its own fetch, parse, chunk, language, OCR, and legacy-font modules; the Python server is one 7,255-line file.
- Evals as the spec
- Gold, smoke, and guard sets sit in benchmarks/; the v6.4 quick48 run reports URL recall 0.94, two wrong refusals, and source citations in 45 of 48 rows.
Nuance
On September 15 the helpdesk timed out, so we saw no live answer. The served model is Gemma 4 E4B on Apple MLX with a private adapter, not the E2B the Raspberry Pi note runs at 6 to 8 tokens per second. The invented-phone-number story is in the fine-tuning README and is a builder-reported account that we could not independently confirm.
Sources
Last updated: . Editorial updates do not imply a new technical check.
Builder credits reviewed: , using the official announcement, submission, and any linked credit sources.
Builder? Add context, request a correction, or ask for a re-check →