Skip to main content

A canonical, engine-agnostic schema and adapter suite for parsed documents

Project description

Docvion 📄⚡

One schema for every document parser.

PyPI version Docvion CI Python Version License: MIT Code Style: Black


1. Problem Statement

Every document-parsing engine (Docling, Tesseract, PaddleOCR, Azure Document Intelligence, Google Document AI, AWS Textract) returns output in its own incompatible shape. A developer building a RAG pipeline or memory ingestion engine against one parser's native output format is locked in. Switching parsers, comparing engine accuracy, or combining outputs from multiple engines requires rewriting downstream code every single time.

There has been no neutral, engine-agnostic representation of a parsed document — until now.

2. Solution: Before & After

docvion is a schema-first Python library created by Prolixis that defines one canonical representation of a parsed document — DocvionDocument — plus a suite of zero-overhead adapters that convert any supported parser's output into that canonical form.

Before Docvion (Parser Lock-In)

# Locked to Docling's specific dictionary layout:
def build_llm_prompt(docling_json):
    texts = docling_json["texts"]
    prompt = ""
    for item in texts:
        if item["label"] == "title":
            prompt += f"# {item['text']}\n"
        elif item["label"] == "paragraph":
            prompt += f"{item['text']}\n"
    return prompt

After Docvion (Engine-Agnostic Downstream Pipeline)

from docvion import DocvionDocument, convert

# Downstream code relies strictly on DocvionDocument. Swap engines freely!
doc: DocvionDocument = convert(engine="docling", raw_output=raw_data)
# Or swap to Tesseract / PaddleOCR without changing 1 line of downstream code:
# doc: DocvionDocument = convert(engine="tesseract", raw_output=tesseract_data)

prompt_context = doc.export_to_markdown()
json_payload = doc.export_to_json()

3. Quickstart

from docvion import DocvionDocument, convert

# Option A: Bring your own engine output
doc = convert(engine="docling", raw_output=my_docling_result)

# Export clean, structured Markdown for LLM prompt context
markdown_text = doc.export_to_markdown()

# Export full-fidelity JSON (bboxes, confidence, table cells)
json_payload = doc.export_to_json()

Convenience one-liner that executes the engine and converts in a single call:

from docvion import parse

# Parse invoice and get canonical schema immediately
doc = parse("invoice.pdf", engine="docling")
print(doc.export_to_markdown())

4. Supported Engines & Confidence Calibration

Engine Native Features Docvion Adapter Per-Block Confidence Calibration
Docling Layout, Tables, Bounding Boxes, Metadata Full: Native block-level confidence scores passed directly (0.0–1.0).
Tesseract Text & Bounding Boxes (image_to_data) Averaged: Calculates mean confidence across word boxes in grouped paragraph.
PaddleOCR Layout, PP-Structure HTML Tables Full: Region detection score & text recognition confidence.
Azure Doc AI Planned v0.2 🔄 Coming soon
AWS Textract Planned v0.2 🔄 Coming soon

[!NOTE] Transparent Limitation Note on Confidence Calibration: Engines handle confidence differently. Docling and PaddleOCR supply block/region confidence natively. Tesseract provides word-level confidence (conf between 0–100); Docvion averages valid word confidences across grouped lines into Block.confidence. Docvion never fabricates confidence scores—if an engine provides none, confidence remains None.


5. Core Schema (DocvionDocument)

All models are built on Pydantic v2, giving instant JSON serialization, strict validation, and full IDE autocomplete.

Key design principles:

  • Resolution-Independent Bounding Boxes: Bounding boxes (BoundingBox) are normalized to 0.0–1.0 relative coordinates (x0, y0, x1, y1) and indexed by 1-based page number.
  • Flat Table Representation: Tables (Table) are stored as flat cell lists (TableCell) with zero-based row, col, row_span, and col_span indices. Handles merged cells and irregular grids cleanly.
  • Multi-Page Tables: Cells preserve global row/column indexing across page boundaries, preventing table fragmentation in multi-page documents.
class BlockType(str, Enum):
    TITLE = "title"
    HEADING = "heading"
    PARAGRAPH = "paragraph"
    TABLE = "table"
    IMAGE = "image"
    FIGURE = "figure"
    LIST_ITEM = "list_item"
    CAPTION = "caption"
    HEADER = "header"
    FOOTER = "footer"
    FOOTNOTE = "footnote"
    OTHER = "other"

6. Installation

The core docvion package is lightweight and depends only on pydantic>=2.0. Heavy ML engine dependencies are kept optional so base installation takes seconds.

# Core package (zero heavy dependencies)
pip install docvion

# Optional engine extras (install only what you need):
pip install "docvion[docling]"     # Pulls docling
pip install "docvion[tesseract]"   # Pulls pytesseract & Pillow
pip install "docvion[paddleocr]"   # Pulls paddleocr
pip install "docvion[all]"         # Pulls all supported engines

7. Command Line Interface (CLI)

Docvion comes with a CLI for converting documents straight from your shell:

# Convert PDF using Docling into Markdown
docvion convert invoice.pdf --engine docling --format markdown

# Convert image using Tesseract into JSON and save to file
docvion convert scan.png --engine tesseract --format json --output scan_parsed.json

8. Runnable Examples

Check out the included scripts in examples/:

Run an example:

python examples/basic_usage.py
python examples/engine_swap_demo.py

9. Positioning: Docvion & Contivon

Docvion is infrastructure for structured memory.

  • Docvion: Turns any document into a clean, engine-agnostic structure.
  • Contivon: Turns that structure into governed, retrievable memory.

10. Development & Testing

Run unit & stress tests:

python -m unittest discover tests

11. License & Company

Maintained by Prolixis (OPC) Pvt Ltd. Released under the MIT License.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

docvion-0.1.0.tar.gz (30.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

docvion-0.1.0-py3-none-any.whl (27.1 kB view details)

Uploaded Python 3

File details

Details for the file docvion-0.1.0.tar.gz.

File metadata

  • Download URL: docvion-0.1.0.tar.gz
  • Upload date:
  • Size: 30.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.14

File hashes

Hashes for docvion-0.1.0.tar.gz
Algorithm Hash digest
SHA256 a008d9113f0121bfa5885db21b9021fb260984445b24e987c8044c3ddcdfce9f
MD5 47b0bc6797a7f7589af14b937280eabd
BLAKE2b-256 e4ff1e1bcc138875c8a7b707f6432b9c0e5825c98ab265ff067099ecf41047f8

See more details on using hashes here.

File details

Details for the file docvion-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: docvion-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 27.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.14

File hashes

Hashes for docvion-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d8c1fe18d4f115c54aadfb10f3248622293e54465cb651cab71125262beb38eb
MD5 c5ee30246a166f05c540696f319be4a3
BLAKE2b-256 89e49f487b49572717f03b61f302e99a1bb69267db6e8e27c3345023dafe3fd4

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page