Convert pages to Markdown 48% cheaper than Mistral OCR 4.1
LightOnOCR-3 turns scanned page images into Markdown with table structure and reading order. SIE is the open-source inference engine that serves this document model.
LightOnOCR-3 on SIE
Table rows kept together| Characteristic | Specification | Method of analysis |
|---|---|---|
| Al, as Methomyl | 87.5 - 92.5 % | High Performance Liquid Chromatography |
| pH (1 % in water) | 4.0 - 8.0 | pH-meter |
| Appearance | White to cream powder | Visual |
Missing tables and altered words break the record
GPT-6 Luna (no reasoning)
Title word changedTÍTULO DEL DOCUMENTO
El ciclomontañismo una experiencia significativa Universitaria, en la Universidad de Cundinamarca
El ciclomañanismo una experiencia significativa Universitaria, en la Universidad de Cundinamarca
The title’s key word changes. An exact search for the original title no longer matches.
Read the complete recordingClaude Sonnet 5.5 (thinking off)
Metric tables omitted
**Figure 1.** The classifier of the DNN models based on the matrices $M$, $M_{kinematics}$, $M_{kinetics}$. All three metric tables are absent from the complete response.
The caption survives; the values needed to compare the results disappear.
Read the complete recording- arXiv:2604.08538 Study of 14 document parsers on 2,000 business pages: none is consistently strong across all five areas it tests
ParseBench: A Document Parsing Benchmark for AI Agents
“no method is consistently strong across all five dimensions”
- Microsoft Foundry Blog Microsoft: when a model loses table structure, teams bolt on a layout parser
“When the model does not preserve table structure, you add a layout parser.”
Convert pages 90% cheaper than GPT-6.1 Sol
- Tested
- olmOCR-Bench: 1,366 pages across 1,068 source families
- Scored
- Equal-weight text, reading-order, table and math checks across eight categories
- Prices
- SIE Serverless; provider list prices on recorded usage
Send a page image, get Markdown back
The response is Markdown with HTML tables and image placeholders in entities[0].text. The preview renders the recorded table.
from urllib.request import urlopenfrom sie_sdk import SIEClientclient = 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]}, 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: {"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\":{\"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 {"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.METHOMYL 90 SP
| Characteristic | Specification | Method of analysis |
|---|---|---|
| Al, as Methomyl | 87.5 - 92.5 % | High Performance Liquid Chromatography |
| pH (1 % in water) | 4.0 - 8.0 | pH-meter |
| Appearance | White to cream powder | Visual |
Convert a million pages for $2,050
Serverless API
We host the models; you call one API.
- No idle GPUs, pay for what you use
- Fits your stack: SDK, API, CLI, MCP
- Self-host the same open-source engine
- SOC 2 Type 2, US or EU data residency
- Create an account to try Serverless
Self-hosted (Kubernetes)
Your data stays in your cloud, backed by our engineers.
- Terraform modules for your cloud
- Apache-2.0, same engine as Serverless
- GPU workers scale to zero between jobs
- Separate worker pools for each tenant
Deploy SIE to our AWS account with the superlinked/sie/aws Terraform module. Docs: superlinked.com/docs/deployment.Deploy SIE to our Google Cloud project with the superlinked/sie/google Terraform module. Docs: superlinked.com/docs/deployment.Deploy SIE to our Azure subscription with the superlinked/sie/azure Terraform module. Docs: superlinked.com/docs/deployment.Deploy SIE to our Alibaba Cloud account with the superlinked/sie/alicloud Terraform module. Docs: superlinked.com/docs/deployment. Run locally
The open-source server on your own machine.
- NVIDIA GPU
- One container, no cluster
- Process your data fully offline
- Same SDK and model IDs as Serverless
docker run --gpus all -p 8080:8080 ghcr.io/superlinked/sie-server:latest-cuda12-sglang-vision-extract