Likhit document benchmark
Loading benchmark…

Nepali documents, converted faithfully

Likhit is Jawafdehi's public MarkItDown plugin for Nepal-specific document support. It adds Nepali PDF repair, layout-aware Markdown assembly, optional OCR for image-dominant pages, and legacy .doc support. For PDFs it evaluates several extraction paths and returns the best result rather than trusting one fixed pipeline.

pip install likhit

Then enable plugins when you convert: MarkItDown(enable_plugins=True), or from the CLI markitdown --use-plugins document.pdf.

Convert from the command line

The package installs likhit-save, a helper that runs MarkItDown with the plugin enabled and writes the Markdown out for you — no Python needed.

Turn on OCR for scanned pages

Plenty of published records are page images with no usable text layer — nothing but a vision model can read them. Likhit adds an OCR candidate when it finds such a page and OCR is configured. It talks to any endpoint that speaks the OpenAI chat API, so the same three variables cover a model on your own machine, Bedrock behind a gateway, or a hosted API.

OPENAI_BASE_URL points at the endpoint, OPENAI_API_KEY authenticates to it, and MARKITDOWN_OCR_MODEL names the model. Leave them unset and Likhit still converts — it just records that a page needed OCR and carries on with the text it could extract.

No API cost

A model on your own machine

Ollama, llama.cpp or vLLM — all three serve an OpenAI-compatible endpoint, and no page image leaves the machine.

ollama pull qwen2.5vl:7b

# Ollama ignores the key; the client refuses to start without one
export OPENAI_API_KEY=ollama
export OPENAI_BASE_URL=http://127.0.0.1:11434/v1
export MARKITDOWN_OCR_MODEL=qwen2.5vl:7b

likhit-save scanned-notice.pdf --out notice.md
AWS

Bedrock, through a gateway

Bedrock does not speak the OpenAI API, so run a translating proxy in front of it. The proxy picks up your AWS credentials the usual way — AWS_PROFILE, environment variables or an instance role — and Likhit only ever sees an OpenAI endpoint.

pip install 'litellm[proxy]'
litellm --model bedrock/anthropic.claude-sonnet-5

# whatever you configured the proxy to accept
export OPENAI_API_KEY=local-proxy-key
export OPENAI_BASE_URL=http://127.0.0.1:4000/v1
export MARKITDOWN_OCR_MODEL=bedrock/anthropic.claude-sonnet-5

likhit-save scanned-notice.pdf --out notice.md

Any vision-capable model your account has enabled will do — swap the model id for the one you have access to.

Hosted

A hosted API

Point at any OpenAI-compatible provider. For Gemini, set the Google key alone and Likhit selects Google's OpenAI-compatible base URL for you.

export OPENAI_API_KEY=your-api-key
export OPENAI_BASE_URL=https://api.example.com/v1
export MARKITDOWN_OCR_MODEL=your-vision-model

# or Gemini, where the base URL is filled in for you
export GEMINI_API_KEY=your-gemini-key
export GEMINI_MODEL=gemini-2.5-flash

Benchmark

Every result below comes from a real, published government document — no synthetic fixtures. Each one is converted three ways, recorded on a machine where all three OCR backends work, and replayed here; the banner below says when. Pick a document to read what Likhit extracted, compare the configurations, and check the assertions that gate the build.

Select a document result