Complex documents. Validated Python objects.
ExtractThinker is an open-source Python library for turning documents into typed data. Define a Pydantic contract, choose a document parser and LLM, then load, classify, split and extract.
Documentation · Quickstart · Contributing · 2026 roadmap
First extraction
pip install extract-thinker
Set EXTRACT_THINKER_MODEL to a model available to you and configure that provider's API key. Save this sample as invoice.txt:
Invoice: INV-2026-001
Supplier: Example Company
Total: 120.00 EUR
import os
from pydantic import Field
from extract_thinker import Contract, DocumentLoaderTxt, Extractor, LLM
class Invoice(Contract):
invoice_number: str
supplier: str
total: float = Field(ge=0)
currency: str
extractor = Extractor(
DocumentLoaderTxt(),
LLM(os.environ["EXTRACT_THINKER_MODEL"], token_limit=1000),
)
result = extractor.extract("invoice.txt", Invoice)
print(result.model_dump())
The result is a validated Invoice. Schema validity does not guarantee factual accuracy; evaluate results on your documents. Extraction uses the configured provider and may incur charges.
For PDFs, install pypdf and use DocumentLoaderPyPdf. Scanned documents need OCR or a vision-capable model. System MIME detection requires libmagic (brew install libmagic on macOS or apt-get install libmagic1 on Debian/Ubuntu). See the quickstart for a credential-free loading check and setup details.
Build a document workflow
| Need | Component |
|---|---|
| Read PDFs, images, tables and spreadsheets | Document loaders |
| Define fields, constraints and post-validation | Pydantic contracts |
| Classify and split mixed document bundles | Classification and splitters |
| Handle long inputs and incomplete responses | Completion strategies |
| Use local models | Ollama setup |
2026 additions on main
The repository now includes page retrieval with SQLite, parallel field extraction, configurable model routing, local entity masking, page events, PyMuPDF/Camelot/Tabula/Adobe loaders, and an MCP service with Docker Compose. These changes are not yet a new PyPI release. Install from a checkout to use them:
git clone https://github.com/enoch3712/ExtractThinker.git
cd ExtractThinker
pip install -e .
Read the 2026 update and compatibility notes, MCP setup, and issue-resolution evidence. The core supports Python 3.9–3.13; the optional MCP service requires Python 3.10+.
Contribute
Start with CONTRIBUTING.md. The offline core suite runs without provider credentials. Good contributions include reduced document fixtures, loader compatibility fixes, examples with expected outputs, and clear reports of model or parser limitations.
If ExtractThinker helps your project, a GitHub star helps others find it. The roadmap focuses on reliable onboarding, reproducible examples and contributor support.
Articles and project history
Stay updated and connect with the community:
- Scaling Document Extraction with o1, GPT-4o & Mini
- Claude 3.5 — The King of Document Intelligence
- Classification Tree for LLMs
- Advanced Document Classification with LLMs
- Phi-3 and Azure: PDF Data Extraction | ExtractThinker
- ExtractThinker: Document Intelligence for LLMs
