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
pip install extract-thinkerSet 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.
| 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 |
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+.
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.
Stay updated and connect with the community:
