CASE STUDY
Academic DeepSearch
Abundance: a deep-research application that turns a complex question into an evidence-backed report – with counterevidence, calibrated confidence and citations that may only point at admitted sources.
- Role
- Concept, architecture and development
- Status
- Open source (MIT) on GitHub, release v1.0.0

STARTING POINT
Problem
Deep-research tools sound convincing, but the chain from claim to source breaks quickly: the model decides for itself which tools run, cites pages nobody ever checked and reports a confidence nobody can recompute. For academic questions that is useless – every sentence has to trace back to a piece of evidence, and the counterevidence belongs in the report too.
HOW IT WORKS
Solution & architecture
Research
The graph decides, not the model
A research run is a deterministic LangGraph workflow with eight stages. The model plans falsifiable evidence questions and synthesises at the end, but which capability runs when is fixed by the graph. Evidence is collected in parallel and read-only; source admission, deduplication and quote binding are code, not prompts. Three modes set hard budgets of 9, 30 or 60 evidence records per run.
- 8 stages, from scoping to publication
- Quick, Balanced, Thorough: at most 9, 30 or 60 evidence records
- Retrieved text is treated as untrusted data

Verification
Every claim has to point at its evidence
Citations in the report may only reference admitted evidence – the code enforces that. On top, a pinned DeepSeek V4 Flash profile checks in shadow mode whether the bound evidence supports a claim, contradicts it or is insufficient. Such a model is only promoted through a reproducible gate: three trials on a versioned dataset of twelve cases on which the old citation check passed 0 of 12.
- Verdicts supports, contradicts, insufficient – each with a verbatim quote
- 3 trials: 11/12, 10/12 and 11/12 passed
- Shadow mode: measures the report but cannot rewrite it

ARCHITECTURE
The path through the system
Inquiry
a complex question
Plan
falsifiable evidence questions
Evidence
parallel, read-only search (Tavily)
Admission
URL policy and dedup enforced in code
Synthesis
structured claims with evidence IDs
Verification & report
quote binding, deterministic rendering
Streaming
SSE events with a stable contract; a cancel propagates from the browser into the graph
Persistence
PostgreSQL for runs, reports, metrics and LangGraph checkpoints
Quality gates: CI with tests, mypy, ruff and pip-audit; an eval harness with 30 reference cases and a three-trial promotion gate for claim verification
Results
- deterministic stages in the LangGraph workflow
- 8deterministic stages in the LangGraph workflow
- evidence records per run, hard-budgeted by mode
- up to 60evidence records per run, hard-budgeted by mode
- mean claim-verification pass rate across 3 trials (12 cases)
- 89 %mean claim-verification pass rate across 3 trials (12 cases)
- pass rate of the previous citation check on the same dataset
- 0/12pass rate of the previous citation check on the same dataset
EVIDENCE & SCOPE
What is evidenced — and where the claim ends
These four fields separate my contribution, the project context, the measurement basis and the limits of the results.
- My contribution
- Concept, architecture and development of the eight-stage LangGraph workflow, source admission, quote binding, persistence, streaming interface and evaluation gate.
- Team & context
- The project is public on GitHub as an MIT-licensed v1.0.0 release. The case study does not quantify other team contributions and does not infer sole authorship from its open-source status.
- Measurement basis
- The promotion gate uses twelve versioned claim-verification cases and three trials with 11/12, 10/12 and 11/12 passes, a mean of 89 %. The previous citation check scored 0/12 on the same dataset; the complete evaluation harness contains 30 reference cases.
- Limitations
- The 89 % applies to twelve cases and one pinned model profile, not arbitrary research questions or models. Verification runs in shadow mode: it measures the report but cannot rewrite it.
BUILT WITH
Tech stack
- Python
- FastAPI
- LangGraph
- LangChain
- OpenRouter
- Tavily
- PostgreSQL
- Next.js
- React
- Upstash Redis
- Docker
- GitHub Actions
Links
Further reading
- NoteLangGraph deep research: verify citations instead of just linkingHow Abundance binds claims, admitted evidence and verbatim quotes in code – and why semantic verification deliberately measures in shadow mode only.
- NoteLLM evals with a small reference dataset: what 12 cases can doWhat a versioned twelve-case eval can reliably protect, how three trials scoring 11/12, 10/12 and 11/12 are evaluated, and where the evidence stops.
Does this match what you have in mind?
I build systems that are meant to run in production, not just to demo. If that matches what you have in mind, get in touch.
All case studies
