The Gemma 4 Good Hackathon

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.

  1. 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

  2. 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.

  3. 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.