Fig. 02 · Voice-first jobs auditing
Direct Beneficiary Verification
Asks workers themselves, in Amharic, Afaan Oromo or English, whether a development programme's “good job” was real, and turns the conversation into an auditable monitoring record.
- Role
- Technical lead
- Team
- Team Bekoji
- When
- Aug 2026
- Stack
- Laravel 13, React 19, PostgreSQL, Laravel AI SDK, Llama 3.3 70B on Groq, Addis AI, Whisper
- Links
- GitHub repo
01The problem
Ethiopian development programmes report jobs created from spreadsheets the employers fill in. The workers are never asked. Many only have feature phones, and most don't speak English.
02How it works
7 steps01 · System moves data
The worker speaks
Through a web voice interface or a 2G feature-phone IVR. Addis AI handles Amharic and Afaan Oromo speech, Whisper handles English.
02 · AI proposes
Two specialists extract
A supervisor fans out to an employment-facts agent (age, hours, wage) and a rights agent (child labour, forced labour, discrimination, association). Every claim carries a source quote and a confidence score.
03 · AI proposes
A critic checks the claims
A temperature-0 verifier re-reads every claim against the raw transcript and lowers confidence wherever they don't match.
04 · Rules decide
Rules decide the verdict
A plain PHP engine rules seven statutory clauses as met, not met or unclear. Anything under 0.55 confidence is unclear. A stated age under 15 stops the interview immediately.
05 · AI proposes
Ask instead of guess
An unclear clause becomes a follow-up question that echoes the worker's own phrase in their language, spoken back to them.
06 · Person approves
The employer confirms
A magic-link portal lets the employer confirm or dispute. Records reconcile into agree, disagree, worker-only or employer-only, and disputes go to programme staff. Nothing is clawed back automatically.
07 · Rules decide
A signed evidence pack
Records are SHA-256 hash-chained and signed, so changing one breaks every hash after it.
- AI proposes
- Rules decide
- Person approves
- System moves data
03Hard problems
3 of themKeeping hallucinations out of a compliance verdict
The model only extracts claims with quotes, a critic re-checks them, and deterministic rules make the call. Low confidence never becomes a guess; it becomes a question.
Three languages, two scripts
Numbers are parsed from English, Ge'ez-script Amharic and Afaan Oromo phrasing. Vague answers like “after the rains” are routed to a clarifying question on purpose.
A child-safety interlock
An age under 15 stops the interview, logs a hard-case flag, and counts the person as zero toward the programme's figures.
04By the numbers
Demoed on synthetic records. No real beneficiaries were interviewed.- place, jury award, AI Builder Hackathon Addis Ababa
- 1st
- of active build time
- ~9 h
- languages, two scripts
- 3
- automated tests
- 64
05What I'd do differently
The rule engine reads numbers out of free text with regex, which is brittle across languages. I'd have the extractor return typed, schema-validated fields and keep regex only as a cross-check. A donor-grade evidence pack should also use a public-key signature, not an app secret.