Skip to main content

DocQWise: Read, Extract, Retrieve

Document intelligence that adapts, accelerates, and scales.

PyPI License Open In Colab


What is DocQWise?

DocQWise is a pluggable, high-performance document intelligence engine for structured and unstructured data. Read any document format, extract exact structured data, and retrieve with semantic search : locally, at scale, for zero per-page cost.

Not a parser. Not a framework. A platform in a library.

Key Features

  • Read anything : PDF, DOCX, images, Excel, CSV, JSON, XML, databases, emails, presentations
  • Extract everything : text, tables, fields, forms, entities, images, layout with bounding boxes
  • Pluggable everything : bring your own OCR, vector DB, LLM, database, graph store
  • Speed-first : multiprocessing, async I/O, GPU batching, batch processing
  • Incremental : hash-based change detection, never reprocess unchanged files
  • Self-improving : user corrections stored as exact overrides, applied automatically
  • Local-first : zero cloud dependency, zero per-page cost, your data stays yours
  • Deterministic : same input = same output, always

Architecture

arc

Installation

# Core (PDF, DOCX, TXT, images, SQLite store)
pip install docqwise

# With ML models (OCR, layout, embeddings)
pip install docqwise[ml]

# Full processing (pandas, Excel, tables, BM25)
pip install docqwise[full]

# Cloud API connectors (OpenAI, Azure, AWS, Google)
pip install docqwise[api]

# Vector store connectors (Qdrant, FAISS, ChromaDB, pgvector)
pip install docqwise[connectors]

# GraphRAG (NetworkX, Neo4j, Kuzu)
pip install docqwise[graph]

# REST API server (FastAPI)
pip install docqwise[server]

# Everything
pip install docqwise[all]

Docker

# Quick start
docker run -p 8000:8000 -v ./docs:/data vkant/docqwise:latest

# Docker Compose
docker compose up -d

Quick Start

from docqwise import Docqwise

dq = Docqwise()

# Ingest documents
dq.ingest("documents/")

# Semantic search
results = dq.retrieve("payment terms", top_k=5)

# Natural language Q&A
answer = dq.ask("What is the total amount?")

# Field extraction
fields = dq.extract_fields("invoice.pdf", template="invoice")

# Table extraction
tables = dq.extract_tables("report.pdf")
df = tables[0].to_dataframe()

Extract from Any Source

dq = Docqwise()

# Documents
dq.ingest("report.pdf")
dq.ingest("contract.docx")
dq.ingest("scan.tiff")

# Structured data
dq.ingest("data.csv")
dq.ingest("transactions.xlsx")

# Databases
dq.ingest("postgresql://host/db", tables=["invoices"])
dq.ingest("mongodb://host/db", collections=["contracts"])

# Cloud storage
dq.ingest("s3://bucket/documents/")

# Folders (auto-detect all formats)
dq.ingest("documents/")

Field Extraction

# Auto-detect fields
fields = dq.extract_fields("invoice.pdf")

# Schema-driven extraction
fields = dq.extract_fields("invoice.pdf", schema={
    "vendor_name": {"type": "string"},
    "total": {"type": "number"},
    "due_date": {"type": "date"},
    "line_items": {"type": "array"},
})

# Pre-built templates
fields = dq.extract_fields("invoice.pdf", template="invoice")

Self-Improving Corrections

result = dq.extract_fields("invoice.pdf", template="invoice")

# Fix a wrong field
result.correct({"tax": 1402.00, "po_number": "PO-8891"})

# Next similar document : correction applied automatically
result2 = dq.extract_fields("invoice_002.pdf")
# tax and po_number now extracted correctly

Query Structured Data

dq.ingest("sales.xlsx")

dq.ask("What is the total amount?")         # → exact SUM computation
dq.ask("Which vendor has highest sales?")    # → GROUP BY + MAX
dq.ask("How many invoices are overdue?")     # → COUNT + WHERE filter

dq.ingest("postgresql://host/db", tables=["invoices"])
dq.ask("Show me vendors with outstanding invoices")  # → SQL JOIN

Parallel Processing

dq = Docqwise(
    workers=8,          # CPU processes
    gpu_workers=2,      # GPU inference
    threads=4,          # I/O threads
    batch_size=32,      # model batch size
)

await dq.ingest_async("documents/", show_progress=True)
# ████████████████████░░░░ 8,421/10,000 | 142 docs/sec | ETA: 11s

Pipeline DAG

from docqwise.pipeline import Pipeline

pipe = Pipeline("invoice_processing")
pipe.add_node("read", node_type="reader")
pipe.add_node("ocr", node_type="ocr", engine="easyocr")
pipe.add_node("extract", node_type="field_extractor", template="invoice")
pipe.add_node("store", node_type="vector_store", backend="qdrant")

pipe.connect("read", "ocr")
pipe.connect("ocr", "extract")
pipe.connect("extract", "store")

results = await pipe.run("invoices/", workers=8)

Docker Deployment

# REST API server
docker compose up -d

# Access API
curl -X POST http://localhost:8000/extract \
  -F "file=@invoice.pdf" \
  -F "template=invoice"

MCP Server

from docqwise.mcp import DocqwiseMCPServer

server = DocqwiseMCPServer(store_path="./docqwise_db")
server.run(port=8080)

CLI

docqwise ingest ./docs --workers 8 --progress
docqwise extract invoice.pdf --template invoice
docqwise query "payment terms" --top-k 5
docqwise ask "What is the total?" --source data.xlsx
docqwise serve --port 8000
docqwise mcp --port 8080

Ecosystem

DocQWise is part of the VK-Ant open-source AI ecosystem:

Library Tagline Domain
SightRAG See. Search. Retrieve. Visual intelligence
sonarwise Hear. Search. Retrieve. Audio intelligence
docqwise Read. Extract. Retrieve. Document intelligence
adaptive-intelligence Learn. Remember. Adapt. Orchestration
llmevalkit Evaluate. Score. Improve. Evaluation

License

Apache License 2.0

Author

Venkatkumar Rajan

Sometimes the ant carries the elephant. 🐜

Download files

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

Source Distribution

docqwise-0.1.1.tar.gz (29.2 kB view details)

Uploaded Source

Built Distribution

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

docqwise-0.1.1-py3-none-any.whl (33.3 kB view details)

Uploaded Python 3

File details

Details for the file docqwise-0.1.1.tar.gz.

File metadata

  • Download URL: docqwise-0.1.1.tar.gz
  • Upload date:
  • Size: 29.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.14.2

File hashes

Hashes for docqwise-0.1.1.tar.gz
Algorithm Hash digest
SHA256 baf101c5bae5ed1534def52ef9813e6af38067a2b8a9a0c0096f0fb09a38563c
MD5 3a88aa5e6d90894700a4415b0aadb3e1
BLAKE2b-256 7b6dec4e5efe9189251da2c3f610f91f1b03546c5d7cfa4e4a2beaf0d63fc81b

See more details on using hashes here.

File details

Details for the file docqwise-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: docqwise-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 33.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.14.2

File hashes

Hashes for docqwise-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 bec676769aba5a711758282ea1c4c11b88ecfd084d5824666aeec490b872a74e
MD5 4c428f494b806a61d11f77fbb5ccf053
BLAKE2b-256 cead9180750bb0653dd2d0723c43563450a3ea94963c612965a9518c23d04299

See more details on using hashes here.

Release history Release notifications | RSS feed

0.3.1

2 files

0.2.1

2 files

0.2.0

2 files

This release

0.1.1 This release

2 files

0.1.0

2 files

Supported by

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