Why did we open-source our inference engine? Read the post

Better Markdown than Mistral OCR 4.1, for 35% less

Turn PDFs and scanned pages into clean Markdown that keeps tables and reading order intact, ready for search and LLMs. SIE runs LightOnOCR-3, an open model built for documents, so you pay less per page.

LightOnOCR-3 on SIE

Table rows kept together
Markdown
CharacteristicSpecificationMethod of analysis
Al, as Methomyl87.5 - 92.5 %High Performance Liquid Chromatography
pH (1 % in water)4.0 - 8.0pH-meter
AppearanceWhite to cream powderVisual

Mistral OCR 4.1 split this specification table into loose lists

Mistral OCR 4.1

Table rows flattened
Returned Markdown

CHARACTERISTIC

Al, as Methomyl pH (1 % in water) Appearance

SPECIFICATION

87.5 - 92.5 % 4.0 - 8.0 White to cream powder

METHOD OF ANALYSIS

High Performance Liquid Chromatography pH-meter Visual

Chunks split at these headings lose the table’s row associations.

Claude Sonnet 5.5 accuracy, 9x cheaper

Quality
benchmark checks passed ↑
SIE LightOnOCR-3
SIE LightOnOCR-3 85.1%
Claude Sonnet 5.5
Claude Sonnet 5.5 84.1%
Mistral OCR 4.1
Mistral OCR 4.1 83.3%
GPT-6 Luna
GPT-6 Luna 80.6%
Claude Haiku 5.5
Claude Haiku 5.5 80.0%
Cost
USD / 1k pages ↓
GPT-6 Luna
$1.02 GPT-6 Luna
Claude Haiku 5.5
$1.24 Claude Haiku 5.5
SIE LightOnOCR-3
$2.60 SIE LightOnOCR-3
Mistral OCR 4.1
$4.00 Mistral OCR 4.1
Claude Sonnet 5.5
Claude Sonnet 5.5 $25.42
olmOCR-Bench

1,366 page images from the public benchmark

Checks
8,234 text, reading-order, table and math checks
Prices
Real-time list prices: SIE effective 2026-10-13, Mistral read 2026-10-10

Send a page image, get Markdown back

from urllib.request import urlopen
from sie_sdk import SIEClient
​
client = SIEClient(api_key="API keysk-sie-…")
​
image_bytes = urlopen(imagemethomyl-page.pngbrowse).read()
image = {"data": image_bytes, "format": "png"}
result = client.extract(
"modellightonai/LightOnOCR-3-4B",
{"id": "methomyl-page", "images": [image]},
instruction="instructiongrounding",
options={"max_new_tokens": 12288, "temperature": 0.1, "top_p": 1},
)
print(result["entities"][0]["text"])
import { unpackMessage } from '@superlinked/sie-sdk';

const imageResponse = await fetch("https://superlinked.com/reference/doc-to-markdown/methomyl-page.png");
if (!imageResponse.ok) throw new Error(`Image returned ${imageResponse.status}`);
const image = new Uint8Array(await imageResponse.arrayBuffer());
const response = await fetch("https://api.superlinked.com/v1/extract/lightonai%2FLightOnOCR-3-4B", {
  method: 'POST',
  headers: {
    Authorization: "Bearer sk-sie-…",
    'Content-Type': 'application/json',
    Accept: 'application/msgpack',
  },
  body: JSON.stringify({
    items: [{ id: "methomyl-page", images: [{ data: Buffer.from(image).toString('base64'), format: "png" }] }],
    params: {"instruction":"grounding","options":{"max_new_tokens":12288,"temperature":0.1,"top_p":1}},
  }),
});
if (!response.ok) throw new Error(`SIE returned ${response.status}`);
const result = unpackMessage<{ items: { id: string; entities: { text: string }[] }[] }>(
  new Uint8Array(await response.arrayBuffer()),
);
const item = result.items[0];
if (result.items.length !== 1 || item?.id !== "methomyl-page" || !item.entities[0]?.text) {
  throw new Error('Invalid OCR response');
}
console.log(item.entities[0].text);
curl --fail --silent --show-error 'https://superlinked.com/reference/doc-to-markdown/methomyl-page.png' -o 'methomyl-page.png'
image_bytes=$(base64 < 'methomyl-page.png' | tr -d '\n')
curl https://api.superlinked.com/v1/extract/lightonai%2FLightOnOCR-3-4B \
  -H "Authorization: Bearer sk-sie-…" \
  -H "Content-Type: application/json" \
  -d "{\"items\":[{\"id\":\"methomyl-page\",\"images\":[{\"data\":\"$image_bytes\",\"format\":\"png\"}]}],\"params\":{\"instruction\":\"grounding\",\"options\":{\"max_new_tokens\":12288,\"temperature\":0.1,\"top_p\":1}}}"
Build the "Doc to Markdown" capability into my app using the Superlinked Inference Engine (SIE).

Context
- SIE is an OpenAI-style inference API. Python SDK: `from sie_sdk import SIEClient`; TypeScript: `@superlinked/sie-sdk`.
- Base URL: https://api.superlinked.com (or my regional endpoint). Auth: Bearer key from env `SIE_API_KEY` (never hard-code it).
- Model: lightonai/LightOnOCR-3-4B (SIE primitive: /extract). Keep the model id configurable.

Task
- Input: an uploaded image containing text.
- Behaviour: return the text visible in the image
- Fetch the unmodified PNG from https://superlinked.com/reference/doc-to-markdown/methomyl-page.png. Send one POST https://api.superlinked.com/v1/extract/lightonai%2FLightOnOCR-3-4B with item id "methomyl-page" and images [{data: original PNG bytes, format: "png"}]. Preserve params {"instruction":"grounding","options":{"max_new_tokens":12288,"temperature":0.1,"top_p":1}}; keep this model and profile selected and fail when unavailable instead of substituting another model. In Python use SIEClient.extract; TypeScript uses the native REST body and public unpackMessage decoder shown in Copy. Read the transcription from items[0].entities[0].text (Python single-item result["entities"][0]["text"]), without repairing or calculating source values.

Deliverables
- A typed client wrapper, an application-level function for this task, error handling for timeouts/empty input, and unit tests with a stubbed client.
- Wire it into my existing stack (ask me which framework if unclear) and add a short usage example.
Markdown

METHOMYL 90 SP

CharacteristicSpecificationMethod of analysis
Al, as Methomyl87.5 - 92.5 %High Performance Liquid Chromatography
pH (1 % in water)4.0 - 8.0pH-meter
AppearanceWhite to cream powderVisual

Convert a million pages for $2,599

Self-hosted (Kubernetes)

SIE in your clusters, backed by our engineers.

  • Data stays in your own cloud account
  • Same models and API as Serverless
  • Terraform to your cloud in minutes

Run locally

The open-source server on your own machine.

docker run --gpus all -p 8080:8080 ghcr.io/superlinked/sie-server:latest-cuda12-sglang-vision-extract

Switch to SIE in 5 minutes

from mistralai.client import Mistral

page_url = "https://example.com/scanned-page.png"
client = Mistral(api_key="…")
result = client.ocr.process(
    model="mistral-ocr-4-1",
    document={"type": "image_url", "image_url": page_url},
)
print(result.pages[0].markdown)
SIE
from sie_sdk import SIEClient

page_url = "https://example.com/scanned-page.png"
client = SIEClient(api_key="sk-sie-…")
result = client.extract(
    "lightonai/LightOnOCR-3-4B",
    {"images": [page_url]},
    output="markdown",
)
print(result["markdown"])

Contact us

Tell us about your use case and we'll get back to you shortly.

Apply for an inference grant

Free capacity on our hosted cluster for selected projects. Tell us what you run and we reply by email.