Rank document pages 4% better than Voyage multimodal‑3.5
Tomoro ColQwen3 searches PDFs, slides and scans directly from their page images, including tables and charts. SIE is the open-source inference engine that serves it through one API.
SIE Tomoro ColQwen3 4B
Right pageWhat is the 2026 SEMIMONTHLY standard withholding for Married Filing Jointly with adjusted wages of $1,000?
Excerpt from the first of 8 ranked pages. Recorded query
A similar-looking page can send your answer to the wrong source
Voyage multimodal-3.5
Wrong page firstFDA enhancements to REMS programs 2017 2018 efforts
Approved drugs, with no account of the requested program enhancements. The answer page came 3rd.
FDA, Office of Surveillance and Epidemiology, 2017 updateOCR + OpenAI text-embedding-3-large
Wrong page firstWhat was Romania’s employment rate for people aged 15 to 24 in 2020?
No figure for 2020 on this page. The answer page came 76th.
European Commission, Labour market and wage developments in Europe 2024 (CC BY 4.0)- arXiv:2601.08620 Visual retrievers outperform text retrievers on complex documents
ViDoRe V3: A Comprehensive Evaluation of Retrieval Augmented Generation in Complex Real-World Scenarios
“current models still struggle with non-textual elements, open-ended queries, and fine-grained visual grounding”
- arXiv:2412.02592 ICCV 2025 None of the OCR tools tested produced text good enough for a reliable RAG index
OCR Hinders RAG: Evaluating the Cascading Impact of OCR on Retrieval-Augmented Generation
“none is competent for constructing high-quality knowledge bases for RAG systems”
Search page images 72% cheaper than Cohere Embed v5 Pro
- Tested
- ViDoRe v3: 1,816 questions across 11,624 public document pages
- Scored
- Human relevance grades; nDCG@10 averaged over six document sets
- Prices
- SIE Serverless; providers at their scored page size
Encode the page once. Search it by text.
from pathlib import Pathfrom urllib.request import urlopenfrom sie_sdk import SIEClientclient = SIEClient(api_key="API keysk-sie-…")model = "modelTomoroAI/tomoro-colqwen3-embed-4b:compact"query = "queryWhat is the 2026 SEMIMONTHLY standard withholding for Married Filing Jointly with adjusted wages of $1,000?"pages = [ "irs-p15t-page-13.png", "irs-p15t-page-14.png", # Copy and Run include all 8 pages.]# Pinned image-loading setup omitted; Copy includes it.q = client.encode( model, [{"text": query}], output_types=["multivector"], is_query=True,)[0]["multivector"]docs = client.encode( model, [{"images": [image]} for image in images], output_types=["multivector"], is_query=False,)print(q)print(docs)import { readFile } from 'node:fs/promises';
import { SIEClient } from '@superlinked/sie-sdk';
const client = new SIEClient(undefined, { apiKey: 'sk-sie-…' });
const model = 'TomoroAI/tomoro-colqwen3-embed-4b:compact';
const query = "What is the 2026 SEMIMONTHLY standard withholding for Married Filing Jointly with adjusted wages of $1,000?";
const pages = [
"irs-p15t-page-13.png", "irs-p15t-page-14.png",
// Copy and Run include all 8 pages.
];
// Pinned image-loading setup omitted; Copy includes it.
const [q] = await client.encode(
model, [{ text: query }],
{ outputTypes: ['multivector'], isQuery: true },
);
const docs = await client.encode(
model, images.map((image) => ({ images: [image] })),
{ outputTypes: ['multivector'], isQuery: false },
);
console.log(q, docs);page_0=$(curl --fail --silent --show-error --location 'https://huggingface.co/datasets/superlinked/sie-task-evidence/resolve/74f4e0eb2676a95b625783932796edac12040644/task-visual-examples-2026/irs-p15t-page-13.png' | base64 | tr -d '\n')
page_1=$(curl --fail --silent --show-error --location 'https://huggingface.co/datasets/superlinked/sie-task-evidence/resolve/74f4e0eb2676a95b625783932796edac12040644/task-visual-examples-2026/irs-p15t-page-14.png' | base64 | tr -d '\n')
page_2=$(curl --fail --silent --show-error --location 'https://huggingface.co/datasets/superlinked/sie-task-evidence/resolve/74f4e0eb2676a95b625783932796edac12040644/task-visual-examples-2026/irs-p15t-page-15.png' | base64 | tr -d '\n')
page_3=$(curl --fail --silent --show-error --location 'https://huggingface.co/datasets/superlinked/sie-task-evidence/resolve/74f4e0eb2676a95b625783932796edac12040644/task-visual-examples-2026/irs-p15t-page-16.png' | base64 | tr -d '\n')
page_4=$(curl --fail --silent --show-error --location 'https://huggingface.co/datasets/superlinked/sie-task-evidence/resolve/74f4e0eb2676a95b625783932796edac12040644/task-visual-examples-2026/irs-p15t-page-17.png' | base64 | tr -d '\n')
page_5=$(curl --fail --silent --show-error --location 'https://huggingface.co/datasets/superlinked/sie-task-evidence/resolve/74f4e0eb2676a95b625783932796edac12040644/task-visual-examples-2026/irs-p15t-page-18.png' | base64 | tr -d '\n')
page_6=$(curl --fail --silent --show-error --location 'https://huggingface.co/datasets/superlinked/sie-task-evidence/resolve/74f4e0eb2676a95b625783932796edac12040644/task-visual-examples-2026/irs-p15t-page-19.png' | base64 | tr -d '\n')
page_7=$(curl --fail --silent --show-error --location 'https://huggingface.co/datasets/superlinked/sie-task-evidence/resolve/74f4e0eb2676a95b625783932796edac12040644/task-visual-examples-2026/irs-p15t-page-20.png' | base64 | tr -d '\n')
curl https://api.superlinked.com/v1/encode/TomoroAI%2Ftomoro-colqwen3-embed-4b%3Acompact \
-H "Authorization: Bearer sk-sie-…" \
-H "Content-Type: application/json" \
-d "{\"items\":[{\"text\":\"What is the 2026 SEMIMONTHLY standard withholding for Married Filing Jointly with adjusted wages of \$1,000?\"}],\"params\":{\"output_types\":[\"multivector\"],\"options\":{\"is_query\":true}}}"
curl https://api.superlinked.com/v1/encode/TomoroAI%2Ftomoro-colqwen3-embed-4b%3Acompact \
-H "Authorization: Bearer sk-sie-…" \
-H "Content-Type: application/json" \
-d "{\"items\":[{\"images\":[{\"data\":\"$page_0\",\"format\":\"png\"}]},{\"images\":[{\"data\":\"$page_1\",\"format\":\"png\"}]},{\"images\":[{\"data\":\"$page_2\",\"format\":\"png\"}]},{\"images\":[{\"data\":\"$page_3\",\"format\":\"png\"}]},{\"images\":[{\"data\":\"$page_4\",\"format\":\"png\"}]},{\"images\":[{\"data\":\"$page_5\",\"format\":\"png\"}]},{\"images\":[{\"data\":\"$page_6\",\"format\":\"png\"}]},{\"images\":[{\"data\":\"$page_7\",\"format\":\"png\"}]}],\"params\":{\"output_types\":[\"multivector\"],\"options\":{\"is_query\":false}}}"Build the "Visual document search" 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: TomoroAI/tomoro-colqwen3-embed-4b:compact (SIE primitive: /encode). Keep the model id configurable.
Task
- Input: a text query plus one or more document page images.
- Behaviour: return native token vectors for the query and document page images
- Preserve the original page image bytes. Encode the text query with output_types ["multivector"] and is_query true, then all page images in one batch with output_types ["multivector"] and is_query false. Python: client.encode with output_types and is_query. TypeScript: client.encode with outputTypes and isQuery. Return the native token vectors without application scoring or ranking.
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.
- 2
Page 1726.029 MaxSim - 3
Page 1825.723 MaxSim - 4
Page 1925.561 MaxSim - 5
Page 1525.544 MaxSim
Encode returns token vectors. These recorded vectors are ranked here with MaxSim.
Index a million PDF pages for $200
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
- 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-default