βββββββββββββββ ββββββββββββββββββββββββββββββββ ββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββ βββββββββββββ
ββββββ βββββββββββββββββββ βββ ββββββ βββββββββββββββββ
ββββββ βββββββ βββββββββββ βββ ββββββ βββββββββββββββββ
βββββββββββ βββββββββββ βββ βββββββββββ βββ βββββββββββ
βββββββββββ βββββββββββ βββ βββββββββββ βββββββββββ
An enterprise-grade multi-agent agentic pipeline for automated citation verification and research integrity analysis
Developed as a core deliverable for the Episteme Research Intelligence Layer project. Designed for end-to-end citation verification, author network mapping, and replication checks. Release Version: v1.0.0 Β· Deployed: June 2026
In modern academic research, manually checking the validity of every cited statement, uncovering hidden conflicts of interest, and identifying codebase replicability introduces severe operational bottlenecks and researcher fatigue.
Episteme eliminates this entirely. It converts raw, unstructured paper text into factual claim matrices, cross-references sentences across a 200M+ document vector index, computes conflict-of-interest markers, and highlights methodology limitations β all inside a responsive, browser-level sidebar.
[Raw PDF / HTML Text] ββ> [spaCy NER & Claim Segmentation] ββ> [NV-EmbedQA Vectors]
β
[Notebook & Reviews] βββ [Inference Synthesis (NIM)] βββ [Multi-Agent RAG (Qdrant)]
| Problem | Episteme Solution |
|---|---|
| Factual claims are ungrounded and unchecked | Agentic RAG pipeline scores claims as Verified, Unverified, or Contradicted against 200M+ open papers. |
| Obscured corporate funding and bias | COI Funding Bias Meter computes corporate vs. public distributions and displays them in HSL-colored indicators. |
| Inability to evaluate replication state | Replication Finder queries open repository indices to fetch stars, forks, languages, and Docker build configs. |
| Permissions policy clipboard errors in secure IFrames | Cross-origin delegation system routes copy calls to the host frame context to ensure stable quick-copy interactions. |
| Complex math density and difficulty mapping | Readability Metric & Time Gauge analyzes paper mathematical text and estimates reading speeds dynamically. |
episteme/
β
βββ backend/ # FastAPI Application Service
β βββ app/
β β βββ main.py # Core FastAPI app router and CORS rules
β β βββ config.py # Config validation and environment parser
β β βββ cache.py # Redis connection and get/set caching engine
β β βββ vector_store.py # Qdrant client vector similarity operations
β β βββ utils/
β β β βββ stats.py # Statistical power calculation functions
β β βββ pipeline/
β β βββ graph.py # LangGraph state configuration and nodes DAG
β β βββ models.py # Pydantic schema validation objects
β β βββ nodes.py # NIM inference execution tasks
β βββ Dockerfile # Hugging Face Spaces deployment container settings
β βββ requirements.txt # Python package declarations
β βββ verify_backend.py # E2E pipeline regression tests
β
βββ extension/ # Chrome MV3 Sidebar Extension
β βββ public/
β β βββ background.js # Service worker routing analytics API requests
β β βββ content.js # Script extracting text and delegating copies
β β βββ content.css # Native UI styles inside target tabs
β β βββ manifest.json # Manifest properties and host capabilities
β βββ src/
β β βββ App.tsx # React UI routing panel tabs
β β βββ App.css # Styling rules (variables, glow layouts)
β β βββ main.tsx # React render mount
β βββ vite.config.ts # Vite packager configurations
β βββ tsconfig.json # TypeScript compiler configurations
β
βββ website/ # Vercel Landing Page
βββ index.html # Landing page frame layout
βββ styles.css # Stylesheets (Light/Dark variables)
βββ script.js # Active particle engine and typing simulator
βββ episteme-extension.zip# Downloadable build distribution
The backend pipeline operates as a 6-node parallelized LangGraph Directed Acyclic Graph (DAG):
- Node 1: Claim Extractor (
claim_extractor_node) Segments target text blocks using spaCy NER. Identifies primary mathematical assertions, benchmarks, and claims.- Inference Model: NVIDIA NIM
meta/llama-3.1-8b-instruct.
- Inference Model: NVIDIA NIM
- Node 2: Reference Resolver (
reference_resolver_node) Queries CrossRef and OpenAlex registries to resolve DOIs and crawl citation maps of cited bibliography entries. - Node 3: Integrity & Bias Scanner (
integrity_scanner_node) Scans disclosures to detect corporate funding bias. Analyzes self-citation rates and checks methodologies for circular reasoning.- Inference Model: NVIDIA NIM
mistralai/mixtral-8x7b-instruct.
- Inference Model: NVIDIA NIM
- Node 4: Claim Verifier (
claim_verifier_node) Embeds extracted assertions usingnvidia/nv-embedqa-e5-v5and searches Qdrant vector databases to classify claims asVerified,Unverified, orContradicted. - Node 5: Intelligence Synthesizer (
intelligence_synthesizer_node) Assembles reviews, calculates mathematical readability scores, and synthesizes 3 future research directions.- Inference Model: NVIDIA NIM
meta/llama-3.1-70b-instruct.
- Inference Model: NVIDIA NIM
- Node 6: Replication & Video Parser (
video_parser_node) Locates open-source codebases, Docker files, and matches active topics against conceptual YouTube video lists.
Statistical validity is evaluated locally inside the sidebar. Given effect size (
To optimize latency and control token costs, Episteme routes data requests through a multi-tiered caching structure:
[POST /api/analyze]
β
(Lookup Cache Key)
βΌ
[Upstash Redis Cache] ββ(Hit)ββ> [Return Cached JSON]
β
(Miss)
βΌ
[Supabase DB / pgvector Check] ββ(Hit)ββ> [Save to Redis & Return]
β
(Miss)
βΌ
[Run LangGraph Agent Pipeline]
β
(Write to DB & Redis)
βΌ
[Return Output]
1. POST /api/analyze (Analyze Research Paper)
{
"title": "Attention Is All You Need",
"abstract": "We propose a new simple network architecture, the Transformer...",
"full_text": "...",
"doi": "10.48550/arXiv.1706.03762",
"arxiv_id": "1706.03762"
}{
"status": "success",
"claims": [
{
"id": "claim_0",
"sentence": "The Transformer achieves 28.4 BLEU on the WMT 2014 English-to-German translation task.",
"verdict": "Verified",
"confidence": 0.98,
"evidence_papers": [
{
"title": "BLEU: a Method for Automatic Evaluation of Machine Translation",
"citation_url": "https://doi.org/10.3115/1073083.1073135"
}
]
}
],
"integrity": {
"coi_score": 0.15,
"reproducibility_factor": 0.85,
"statistical_power": 0.95,
"methodology_flags": []
},
"author_network": [
{
"name": "Ashish Vaswani",
"affiliation": "Google Brain",
"h_index": 42,
"co_authors": ["Noam Shazeer", "Niki Parmar"],
"top_papers": [
{
"title": "Attention Is All You Need",
"year": 2017,
"citations": 120000
}
]
}
]
}2. POST /api/explain (Highlight Jargon Explanation)
{
"term": "Self-Attention Mechanism",
"context": "An attention mechanism relating different positions of a single sequence..."
}{
"term": "Self-Attention Mechanism",
"explanation": "A process where an algorithm weighs the importance of different words in a sentence relative to each other, allowing the model to capture context regardless of position.",
"prerequisites": ["Attention", "Neural Networks"]
}-
Clipboard Access in Cross-Origin IFrames: Standard Chrome MV3 extensions running inside cross-origin iframes (like PDF readers) throw a
Permissions policy violation: The Clipboard API has been blockederror duringnavigator.clipboard.writeTextcalls.Episteme bypasses this restriction by delegating clipboard writing:
- The extension UI posts a message containing text payload:
window.parent.postMessage({ type: 'copy_to_clipboard', text }, "*"). - The Content Script (running in the main host window context) receives the event.
- The Content Script writes the text directly to the clipboard using unrestricted host-level APIs.
- The extension UI posts a message containing text payload:
-
CORS Settings: To support cross-origin API calls from arbitrary extension host contexts,
backend/app/main.pyenforces wildcard allowances:app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], )
cd extension
npm install
npm run buildLoad the unpacked extension/dist folder into chrome://extensions.
cd backend
python -m venv .venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
pip install -r requirements.txt
python -m spacy download en_core_web_sm
python -m uvicorn app.main:app --reload --host 127.0.0.1 --port 8000The Memory and History features are personal to your extension instance and are not intended to be shared publicly.
If you are using the default pre-configured backend, your saved papers, notes, and memory items should be treated as your own workspace. Other users should not rely on the History tab as a public repository or expect to see everyone else's activity.
For complete privacy and control, users are encouraged to deploy their own backend and configure their own API credentials. However, for convenience, a pre-configured backend is provided for users who do not wish to perform any setup.
Please do not store sensitive, confidential, or personally identifiable information unless you are using a backend that you control and trust.
MIT License.