WorkDWG AC-102
A private AI search engine for a regulated accountancy firm: 12K documents, local models, no data leaves the building
Staff of an Irish chartered accountancy firm search and question 12K internal documents in plain English. Open-weight models run on the firm's own GPU server with no outbound internet, every answer cites its source, and a 100-question benchmark gates every change.
12Kdocuments searchable, none leave the building
- Client
- M.A. Whately & Co., Irish chartered accountancy and audit firm
- Role
- Architect and builder, as Director of AI & Business Automation
- Timeline
- 2026
- Status
- Live, used by the full team
Context and the problem
The firm holds years of client files, letters, working papers and tax records. Finding the right paragraph meant knowing which folder to open and reading document after document: about 15 minutes per lookup. Cloud AI was not an option, because client data cannot be sent to a third party.
What was broken
Knowledge lived in thousands of files. Answering a client question meant knowing which folder to open, then reading. New staff depended on colleagues to find anything.
What it cost
- About 15 minutes per lookup, many times a day across the team.
- Cloud AI tools were off the table: client data cannot go to a third party.
- Answers depended on who remembered where a document was.
The brief
Give staff answers in seconds from their own documents, with the source of every answer, without a single byte leaving the firm's hardware, and without the model ever inventing a figure, a date or a client fact.
Constraints and stakes
- Client data never leaves the firm's own hardware: no cloud AI, no third-party processing, no data processing agreement to sign.
- One GPU, not a data centre: the model had to be strong enough for professional questions and still fit.
- A regulated profession: a confident wrong answer is worse than no answer.
- Documents change every day, so quality has to be re-measured, not assumed.
What was at stake
A regulated firm cannot let client data leave its control, and cannot act on an invented answer. Privacy and grounding were the product, not features.
Adrian's role and team
- Architect and builder, as the firm's Director of AI & Business Automation.
- The benchmark questions came from the staff who use the system every day.
- Used by the full team (10+ people).
The approach, from 0 to 100
Before
About 15 minutes per lookup; cloud AI ruled out for client data.
Design
Local-only architecture: open-weight models, local embeddings and index, no outbound internet.
Benchmark
100 real staff questions written down as the acceptance test.
Quantisation
The 4-bit 30B-class model accepted after under 2 points of benchmark loss.
Assurance
DPIA signed off; 150-prompt red team with zero leaks; external pen test with 0 critical and 0 high findings.
Live
In use by the full team; lookups under 30 seconds.
First 3 months
2,000+ staff queries.
What was built
- A 30B-class model on a single 24 GB GPU. Qwen3-30B-A3B, a mixture-of-experts model that activates about 3B parameters per token, 4-bit quantised and served with Ollama and LM Studio. Quantisation cut model memory about 70% for under 2 points of benchmark accuracy.
- Hybrid retrieval. Keyword and local-embedding search with a local re-ranker, so exact references (names, tax numbers, dates) and meaning both match: the right source is in the top 5 for 96% of benchmark questions.
- Grounded answers only. Every answer quotes and cites the passages it came from. Below the confidence threshold the system answers "not in the documents" instead of guessing: zero uncited answers on the benchmark.
- Isolation by design. No outbound internet on the AI server, telemetry off, and answers filtered by the user's folder permissions, so one client's files never surface in another's answer.
- A benchmark that gates every change. 100 real staff questions; an answer passes only if it is correct and cites its source. It reruns before any model, prompt or index change, and a failed run blocks the change. A separate 500-question held-out set checks every claim against its source passage: under 1% unsupported statements.
- Red-teamed, then pen-tested. 150 attack prompts (prompt injection, jailbreaks, requests for folders the user may not open) produced zero leaks and zero out-of-permission documents. An external penetration test of the private AI and the client platform found 0 critical and 0 high issues; the 2 medium ones were fixed within 48 hours.
- Personal data masked at the edge. Where a task does use a cloud model, names, IBANs and PPS numbers are masked before the call: 100% caught on a 500-document test set.
- Always current. Incremental re-indexing makes new documents searchable within 15 minutes, with the benchmark rerun on the new index.
How the system fits together
DWG AC-102System drawingRev Oct 2026
- Outside the system: a person, a ledger, a regulator
- Built by Adrian
- Human approval or a hard check
- Live in production
- Boundary
Data path
- 01A staff member asks a question in plain English
- 02Hybrid search looks only in folders the user may see
- 03A local re-ranker picks the best sources
- 04The local model answers only from those passages
- 05The answer shows its citations: no source, no answer
Safeguards and controls
- No outbound internet on the AI server and telemetry off: there is nowhere for data to go.
- Answers filtered by the user's folder permissions, so no document leaks across clients.
- No source, no answer: below the confidence threshold the system says "not in the documents".
- Every answer shows its citations, so a person can check it in one click.
- A 100-question benchmark gates every model, prompt and index change.
- Red-teamed with 150 attack prompts and pen-tested externally before launch.
- A named person approves any AI action that touches money or client data, with a full audit trail.
How it was tested
The 100-question benchmark reruns before any model, prompt or index change, and a failed run blocks the change. The 4-bit model was accepted only after the benchmark showed under 2 points of accuracy loss against the full-precision run, and the same gate shipped 3 open-weight model upgrades with no regression reaching staff. A data protection impact assessment was signed off before go-live.
Results
- 12Kinternal documents searchable in plain English
- < 30 sper lookup, down from about 15 minutes; a median answer in about 6 seconds
- 90%+of benchmark answers correct and cited (100 real staff questions)
- 96%of benchmark questions with the right source in the top 5
- 0uncited answers on the benchmark
- 2,000+staff queries in the first 3 months
- 0 bytesof client data sent outside the firm
- < 1%unsupported statements on a 500-question held-out set
- 150 / 0red-team attack prompts / leaks
- 0 / 0critical / high findings in the external penetration test
- < 3 monthspayback: about EUR 3K of hardware against about EUR 1.2K a month on cloud APIs
| Measure | Before | After |
|---|---|---|
| Time per lookup | About 15 minutes | Under 30 seconds |
| Where client data goes | Nowhere (no AI) | Nowhere: the firm's own hardware |
| Answers with a source | None | Every answer, or "not in the documents" |
What the client owns now
- The server, the models and the index, on its own hardware.
- The benchmark and the runbook to rerun it.
- The data protection impact assessment, the red-team set and the pen-test report.
Stack
- Qwen3-30B-A3B (4-bit)
- Llama
- Ollama
- LM Studio
- Local embeddings
- Local re-ranker
- Hybrid search (keyword + vector)
- Python
Similar problem?
Describe the process, the systems and the constraint. Hiring for this skill set? The CV has the full record.