Work/2025
GeoMinder
Agentic RAG for mining consultants who lose 30-40% of their time searching a ~100k-document technical repository.

A multi-tool agentic RAG system for mining consultants who lose 30–40% of their time searching a ~100k-document technical repository (EIAs, regulations, design memos); this deployment indexes and measures 275 documents across 20 mining units. Built as an MSc capstone with a three-person team, the agent answers qualitative questions over documents, quantitative ones over a back-office database, and chains both to answer “are we within regulation?”. Evolved from a TRL 6 Streamlit demo to a production architecture on GCP: TRL 8 in technical verification, TRL 7 in operational validation until the sustained real-user pilot completes.
Highlights
- Hybrid Self-Query retrieval as the headline result. The model emits structured entity filters (mine, project, document type) that are validated against the real corpus catalog and enforced as hard file-ID restrictions, with reciprocal-rank fusion inside the filter. Cross-mine contamination collapsed: 34–57% mine precision became 80–90% across five benchmarked Gemini models, with P90 latency roughly halved and no measured recall cost.
- An A/B that caught its own metric lying. The official precision metric ignored escape-hatch sources and read 92.7%; scoring “sources as the user actually receives them” read 63.7%. The escape hatch now requires rank and margin simultaneously (39 rescues became 7), and both numbers are published.
- Guardrails measured, not asserted. A five-category input barrier with obfuscation detection (invisible characters, homoglyphs, base64, hex) runs before the model, over question and attachments; an output audit redacts secrets and flags citations no tool call backs. Measured: 0 of 1,520 legitimate questions blocked, 10/10 attacks blocked.
- Guardrailed analytics tools. In production, a Cloud SQL text-to-SQL tool behind a four-layer validator (SELECT-only via sqlglot, table allowlist, read-only transaction with LIMIT, read-only role); the synthetic demo swaps in a parameterized BigQuery tool with bound parameters and a dry-run cost check that aborts expensive queries before they spend.
- Self-healing ingestion. Event-driven indexing (GCS → Eventarc → Workflow → Cloud Run Job) plus a reconciliation pass that retries only what’s missing: a dashboard that once claimed 583 indexed docs while only 221 of 275 were live now reports 288/288 artifacts ACTIVE, with Document AI batch OCR for 1,163-page scans and text-layer extraction for 483 MB PDFs.
- Evaluation as a CI gate. Golden set + deterministic metrics + LLM-as-judge groundedness (Gemini 2.5 Pro judging Flash-class models to avoid self-grading), gating merges against a 0.85 pass rate — and the eval instrument itself was adversarially audited after it was caught penalizing notation instead of correctness.

