How vaishnavsreekumar/factline works
FACTLINE is an evidence-first cross-document fact analysis application. Users upload financial or economic PDFs; the API parses pages, selects relevant context, extracts candidate claims, verifies page-level evidence, normalizes facts, evaluates candidate pairs through comparability before classifying relationships, and persists results for retrieval in the UI. The README documents the domain stages; sampled source confirms the parser, API routes, database behavior, and selected context logic. Some service orchestration and extraction internals were not sampled, so their detailed call wiring is represented only where documented.
Main entry points: analysis.py Analysis Service · routes.py API Routes · App.jsx FACTLINE App · pdf_parser.py Page PDF Parser
Components 24
User Interface
- FACTLINE App
frontend/src/App.jsx - Document Uploader
frontend/src/components/DocumentUploader.jsx - Analysis Progress
frontend/src/components/AnalysisProgress.jsx - Results Views
frontend/src/components/RelationshipsView.jsx
API & Orchestration
- FastAPI App
backend/main.py - API Routes
backend/api/routes.py - Analysis Service
backend/services/analysis.py
Document & Extraction
- Page PDF Parser
backend/extraction/pdf_parser.py - Page Relevance Filter
backend/page_filter/relevance.py - Context Selection
backend/context_selector/selector.py - Context Expansion
backend/context_selector/context_expander.py - Quota Planner
backend/quota_experiment/planner.py - Fact Extraction
backend/extraction/fact_extractor.py - Evidence Verification
backend/extraction/evidence.py
Fact Reasoning
- Fact Normalization
backend/normalization/normalizer.py - Candidate Matching
backend/reasoning/matcher.py - Comparability Gate
backend/reasoning/comparability.py - Relationship Surfacing
backend/reasoning/surfacing.py - Relationship Engine
backend/reasoning/relationships.py - Fact & Document Models
backend/models/fact.py
Persistence
- SQLite Store
backend/db/database.py
Other components
- Analyst
- Source PDFs
- Gemini Model
Connections 35
- Analyst → FACTLINE App: uses
- FACTLINE App → Document Uploader: renders
- FACTLINE App → Analysis Progress: shows progress
- FACTLINE App → Results Views: renders results
- Document Uploader → FACTLINE App: submits PDFs
- FACTLINE App → API Routes: uploads analysis
- FACTLINE App → API Routes: retrieves analysis
- FastAPI App → API Routes: mounts routes
- API Routes → Analysis Service: runs analysis
- API Routes → Page PDF Parser: parses uploads
- API Routes → Candidate Matching: matches pair
- API Routes → Comparability Gate: gates pair
- API Routes → Relationship Engine: evaluates pair
- API Routes → Analysis Service: loads analysis
- Analysis Service → Page PDF Parser: parses PDFs
- Analysis Service → Page Relevance Filter: filters pages
- Analysis Service → Context Selection: selects context
- Context Selection → Context Expansion: expands regions
- Analysis Service → Quota Planner: plans extraction
- Analysis Service → Fact Extraction: extracts facts
- Fact Extraction → Gemini Model: requests candidates
- Fact Extraction → Evidence Verification: verifies claims
- Analysis Service → Fact Normalization: normalizes facts
- Analysis Service → Candidate Matching: pairs facts
- Analysis Service → Comparability Gate: checks comparability
- Analysis Service → Relationship Surfacing: filters relationships
- Analysis Service → Relationship Engine: classifies pairs
- Analysis Service → SQLite Store: persists results
- API Routes → SQLite Store: retrieves records
- Source PDFs → Page PDF Parser: provides bytes
- Page PDF Parser → Analysis Service: returns page records
- FACTLINE App → Results Views: displays analysis
- Evidence Verification → Fact & Document Models: grounds facts
- Fact Normalization → Fact & Document Models: produces normalized facts
- SQLite Store → FACTLINE App: returns analysis data