Capabilities
Purple8 DocIntel handles the full document intelligence lifecycle — from raw bytes to a structured knowledge graph — across every common enterprise format.
Supported formats
Purple8 DocIntel natively parses 70+ document formats across 6 categories — no pre-conversion required.
Office & productivity
| Format | Extension(s) | Notes |
|---|---|---|
.pdf | Text extraction + OCR fallback for scanned pages | |
| Word | .docx, .doc, .odt | Paragraph, heading, table structure preserved |
| Excel | .xlsx, .xls, .ods | All sheets; cell values + types |
| PowerPoint | .pptx, .ppt, .odp | Slide text, notes, shape labels |
| RTF | .rtf | Rich text formatting stripped to plain |
| EPUB | .epub | Spine chapters extracted as ordered pages |
Web & text
| Format | Extension(s) | Notes |
|---|---|---|
| HTML | .html, .htm | Tags stripped; structure preserved via headings |
| Plain text | .txt, .md, .markdown, .rst | Decoded UTF-8, latin-1 fallback |
.eml, .msg | Headers + body; attachments enumerated | |
| CSV / TSV | .csv, .tsv | Rendered as pipe-delimited markdown tables |
| JSON | .json | Pretty-printed as structured text |
| XML | .xml | Tags preserved as structured context |
Images (OCR)
| Format | Extension(s) | Engine |
|---|---|---|
| Raster images | .png, .jpg, .jpeg, .tiff, .bmp, .webp | Tesseract · Azure Document Intelligence · Google Cloud Vision · AWS Textract |
| Sketch / whiteboard | .sketch | GPT-5 vision · Azure AI Vision 4.0 · Google Cloud Vision |
CAD & BIM
| Format | Extension(s) | Extracted content |
|---|---|---|
| IFC | .ifc, .ifczip | Project, site, building, storeys, spaces, IfcElements, materials, property sets, quantities, type objects |
| DXF | .dxf | Layers, entities, blocks, dimensions, text |
| DWG | .dwg | Via LibreDWG conversion to DXF |
| STEP | .step, .stp | Assembly tree, part names, B-rep metadata |
| STL | .stl | Triangle count, bounding box, part name |
| OBJ | .obj | Mesh groups, material references |
| GLTF / GLB | .gltf, .glb | Scene hierarchy, mesh names, materials |
| G-code | .gcode | Tool paths, layer count, estimated print time |
Code & config
.py, .js, .ts, .css, .sql, .sh, .env, .yaml, .yml, .toml, .ini, .cfg — extracted as structured text with language metadata.
SAP
| Format | Extension(s) | Notes |
|---|---|---|
| IDoc | .idoc | Fixed-width 1000-byte record format; segment tree reconstructed |
| ABAP source | .abap | Extracted as plain text with structure markers |
LLM providers
Configure via LLM__PROVIDER environment variable:
| Provider | Value | Notes |
|---|---|---|
| OpenAI | openai | Default; uses ModelRegistry tiers |
| Azure OpenAI | azure | Set LLM__AZURE_ENDPOINT + LLM__AZURE_DEPLOYMENT |
| Anthropic | anthropic | Claude 3.x via tool-use mode |
| Google Gemini | gemini | Via Vertex AI or AI Studio |
| Ollama | ollama | Set LLM__BASE_URL; air-gapped deployments |
Model tiers (ModelRegistry)
| Tier | Current model | Used for |
|---|---|---|
FLAGSHIP | gpt-5.6-sol | AEC, Legal/Contract |
DEFAULT | gpt-5.6-terra | Financial, Scientific, General |
VISION | gpt-5.6-sol | Sketch / image parsing |
NANO | gpt-6-luna | High-volume, cost-sensitive extraction |
All four constants live in config.ModelRegistry. Upgrading models = changing four lines.
OCR engines
| Engine | OCR__ENGINE value | Notes |
|---|---|---|
| Tesseract | tesseract | Default; local, no API key needed |
| Azure Document Intelligence | azure_doc_intel | Best for structured forms + tables |
| Google Cloud Vision | google_vision | Strong multilingual support |
| AWS Textract | textract | Best for US healthcare + financial forms |
Domain extraction profiles
See Extraction Profiles → for full ontology details.
| Profile | profile= value | Model tier | Chunking | Confidence |
|---|---|---|---|---|
| AEC / BIM | aec | FLAGSHIP | table_aware | ≥ 0.75 |
| Legal / Contract | contract | FLAGSHIP | clause | ≥ 0.75 |
| Financial / ERP | financial | DEFAULT | table_aware | ≥ 0.68 |
| Scientific | scientific | DEFAULT | section | ≥ 0.70 |
| General | general | DEFAULT | paragraph | ≥ 0.65 |
Source connectors
See Connectors → for configuration details.
| Connector | Auth | Protocol |
|---|---|---|
| Microsoft SharePoint | Azure AD service principal | Batch pull + change webhooks |
| Atlassian Confluence | API token | Batch pull by space key |
| AWS S3 | IAM credentials / instance profile | Batch pull with prefix + glob filter |
| Generic webhook | Bearer token (header) | POST file bytes or URL |
Job persistence
Jobs and SHA-256 content hashes are persisted in an embedded durable p8l log (SessionContentStore) at /data/docintel_jobs.p8l by default — zero external Redis or SQLite dependencies required. Child CPU workers use lazy initialisation (_LazySessionContentStore) so multi-core worker pools spawn with zero startup replay overhead.
Confidence calibration v0.12.5
LLMs systematically produce overconfident scores (clustered 0.85–1.0). DocIntel applies temperature scaling (T = 2.0) to spread the distribution via a logit → scale → sigmoid transform:
| Raw LLM score | Calibrated score |
|---|---|
| 0.95 | ~0.82 |
| 0.90 | ~0.74 |
| 0.80 | ~0.62 |
| 0.70 | ~0.58 |
| 0.50 | 0.50 (fixed point) |
Applied after fuzzy dedup, before the per-profile confidence threshold. Invoice ECE improved from 0.30 → 0.13.
Table extraction v0.6.7
Structured tables from PDFs, DOCX, and XLSX are no longer flattened into running text:
_tables_to_markdown()convertsParsedDocument.raw_tablesinto markdown table strings_inject_table_windows()creates dedicated LLM context windows from those tables- Large tables are auto-split by row with header preservation
- Each window is tagged with
is_table=Truemetadata
This ensures line items, amounts, dates, and columnar data in tabular form get full extraction attention.
Incremental processing v0.6.7
Resubmitting the same document (via any connector or API) costs zero processing:
- SHA-256
content_hashcomputed from raw document bytes - All three job stores (
memory,redis,sqlite) supportget_by_hash()lookup - If a completed job with the same hash exists, the cached
ExtractionResultis returned immediately - The new job is marked
completedwith apipeline.incremental_skiplog entry
Multi-language support v0.12.5
Automatic language detection across 75+ languages via Lingua, paired with rich per-language extraction conventions:
| Language | Script | Key guidance |
|---|---|---|
| German | Latin | Compound nouns split; formal Sie/du handling |
| French | Latin | Accented characters preserved; date format DD/MM/YYYY |
| Chinese | CJK | Simplified & traditional; no spaces between characters |
| Japanese | CJK + Kana | Kanji names with furigana; honorifics preserved |
| Korean | Hangul | Hangul + Hanja; family-name-first convention |
| Arabic | Arabic | Right-to-left; Hijri date normalisation |
| Hindi | Devanagari | Devanagari + Latin transliteration; honorifics |
| + 8 more | Various | Spanish, Portuguese, Italian, Dutch, Russian, Turkish, Polish, Swedish |
All entity names are extracted in native script with optional romanisation. JSON keys always returned in English.