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

Long-document search on par with voyage‑context‑4, for 79% less

SIE runs open-source search models behind one API. Search whole manuals, contracts and reports as they are, with no chunking step, and get back the document that answers the question.

SIE GTE ModernColBERT

Right article first of 11,802
Question

What rank was Sheehan granted when he was decommissioned?

D. D. Sheehan 8,190 tokens, indexed whole
Matched paragraph, 59% of the way through

… Deafness by shellfire and ill-health necessitated his transfer to the 3rd RMF (Reserve) Battalion at Aghada, then Ballincollig barracks, Co. Cork. Hospitalised often, he was decommissioned late 1917, with a bulletin stating that he "relinquished his commission on account of ill-health contracted on active service, and is granted the permanent honorary rank of Captain, 13 Jan.1918".The Cork Constitution newspaper notice: 15 January 1918 at Cork City Council Library Sheehan was awarded the World War I campaign medals: 1914–15 Star, British War Medal, Victory Medal and Silver War Badge. …

Wikipedia, D. D. Sheehan · CC BY-SA Marked: where the question’s tokens matched best

Chunked embeddings put the wrong article first

OpenAI text-embedding-3-large, chunked

Wrong article first
Question

What rank was Sheehan granted when he was decommissioned?

Ranked 1st: Carroll Sheehan Wikipedia · CC BY-SA

Carroll P. Sheehan (1925-2016) was an American real estate executive and political figure who was a candidate for Governor of Massachusetts in 1974.

The right article, D. D. Sheehan, ranked 2nd. SIE ranked it 1st and Carroll Sheehan 5th.

On par with voyage‑context‑4, ahead of Voyage 4 Large and OpenAI, at the lowest cost to index

Accuracy against cost
437 questions
Right document first ↑ Cost to index 11,802 articles →
Share of 437 questions with the right article ranked first, against the list-price cost to index the same 11,802 long articles
ModelRight document firstCost to index 11,802 articles
SIE GTE ModernColBERT61.6%$2.11
voyage-context-464.1%$10.15
Voyage 4 Large55.6%$9.88
OpenAI 3-large, chunked52.2%$12.76
Cohere Embed v5 Pro44.2%$9.47
Long-document search

437 new questions about long Wikipedia articles; every model ranks the same 11,802 articles

Documents
SIE indexes each article in one piece, the first 8,192 tokens of it. OpenAI gets 1,024-token chunks and voyage-context-4 its own chunks; each scores its best chunk
Scored
The right article ranks first
Cost
Real-time list prices, 11 Oct 2026, on each side’s own billed tokens

Send a question and its passages, get token vectors to rank

import numpy as np
from sie_sdk import SIEClient
​
client = SIEClient(api_key="API keysk-sie-…")
​
query = "querycookie sent with cross-site requests that also needs the Secure attribute"
passages = [
"passage 1Send the cookie only for requests originating from the same site that set the cookie.",
"passage 2Send the cookie only for requests originating from the same site that set the cookie, and for cross-site requests that meet both of the following criteria:",
"passage 3Send the cookie with both cross-site and same-site requests. The Secure attribute must also be set when using this value.",
"passage 4Indicates that the cookie should be stored using partitioned storage. Note that if this is set, the Secure directive must also be set.",
]
​
q = client.encode(
"modellightonai/GTE-ModernColBERT-v1",
[{"text": query}],
output_types=["multivector"],
is_query=True,
)[0]["multivector"]
docs = client.encode(
"modellightonai/GTE-ModernColBERT-v1",
[{"text": passage} for passage in passages],
output_types=["multivector"],
is_query=False,
)
​
def maxsim(query_vectors, passage_vectors):
return sum(max(qt @ dt for dt in passage_vectors) for qt in query_vectors)
​
scores = [maxsim(q, doc["multivector"]) for doc in docs]
for i in np.argsort(scores)[::-1]:
print(f"{scores[i]:.3f} {passages[i]}")
import { unpackMessage } from '@superlinked/sie-sdk';

const query = "cookie sent with cross-site requests that also needs the Secure attribute";
const passages = [
  "Send the cookie only for requests originating from the same site that set the cookie.",
  "Send the cookie only for requests originating from the same site that set the cookie, and for cross-site requests that meet both of the following criteria:",
  "Send the cookie with both cross-site and same-site requests. The Secure attribute must also be set when using this value.",
  "Indicates that the cookie should be stored using partitioned storage. Note that if this is set, the Secure directive must also be set.",
];

async function encode(texts: string[], isQuery: boolean): Promise<Float32Array[][]> {
  const response = await fetch("https://api.superlinked.com/v1/encode/lightonai%2FGTE-ModernColBERT-v1", {
    method: 'POST',
    signal: AbortSignal.timeout(30_000),
    headers: {
      Authorization: "Bearer sk-sie-…",
      'Content-Type': 'application/json',
      Accept: 'application/msgpack',
    },
    body: JSON.stringify({
      items: texts.map((text) => ({ text })),
      params: { output_types: ['multivector'], options: { is_query: isQuery } },
    }),
  });
  if (!response.ok) throw new Error(`SIE returned ${response.status}`);
  const result = unpackMessage<{ items: { multivector: { values: Float32Array[] } }[] }>(
    new Uint8Array(await response.arrayBuffer()),
  );
  return result.items.map((item) => item.multivector.values);
}

const [q] = await encode([query], true);
const docs = await encode(passages, false);
const dot = (a: Float32Array, b: Float32Array) => a.reduce((s, x, i) => s + x * b[i]!, 0);
const maxsim = (qv: Float32Array[], dv: Float32Array[]) =>
  qv.reduce((sum, qt) => sum + Math.max(...dv.map((dt) => dot(qt, dt))), 0);
const ranked = passages
  .map((passage, i) => ({ passage, score: maxsim(q!, docs[i]!) }))
  .sort((a, b) => b.score - a.score);
console.log(ranked);
# Encode the question as a query, then the passages as documents; rank by MaxSim.
curl https://api.superlinked.com/v1/encode/lightonai%2FGTE-ModernColBERT-v1 \
  -H "Authorization: Bearer sk-sie-…" \
  -H "Content-Type: application/json" \
  -d "{\"items\":[{\"text\":\"cookie sent with cross-site requests that also needs the Secure attribute\"}],\"params\":{\"output_types\":[\"multivector\"],\"options\":{\"is_query\":true}}}"

curl https://api.superlinked.com/v1/encode/lightonai%2FGTE-ModernColBERT-v1 \
  -H "Authorization: Bearer sk-sie-…" \
  -H "Content-Type: application/json" \
  -d "{\"items\":[{\"text\":\"Send the cookie only for requests originating from the same site that set the cookie.\"},{\"text\":\"Send the cookie only for requests originating from the same site that set the cookie, and for cross-site requests that meet both of the following criteria:\"},{\"text\":\"Send the cookie with both cross-site and same-site requests. The Secure attribute must also be set when using this value.\"},{\"text\":\"Indicates that the cookie should be stored using partitioned storage. Note that if this is set, the Secure directive must also be set.\"}],\"params\":{\"output_types\":[\"multivector\"],\"options\":{\"is_query\":false}}}"
Build the "Multi-vector" 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/GTE-ModernColBERT-v1 (SIE primitive: /encode). Keep the model id configurable.

Task
- Input: a query string plus a list of candidate documents.
- Behaviour: return the candidates ranked by late-interaction (ColBERT) relevance
- Send two POST requests to https://api.superlinked.com/v1/encode/lightonai%2FGTE-ModernColBERT-v1. Encode one query item {text: query} with params {output_types: ["multivector"], options: {is_query: true}}, then all candidate passages in one batch of {text: passage} items with params {output_types: ["multivector"], options: {is_query: false}}. Do not call the API per candidate. Read the returned per-token vectors from items[i].multivector.values. Compute each candidate's MaxSim score in caller code: sum, over every query token, the maximum dot product with any token in that candidate passage. Sort every candidate by descending score. Native output is token vectors; the caller supplies ranking. In Python, use SIEClient.encode(..., output_types=["multivector"], is_query=True) for the query and encode(..., output_types=["multivector"], is_query=False) for the passage batch; read each decoded ["multivector"] array. In TypeScript, send these native JSON HTTP bodies with Accept: application/msgpack and decode the MessagePack response with the public unpackMessage export from @superlinked/sie-sdk, matching Copy.

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.
Output
RankPassageMaxSim
1
SameSite=None

Send the cookie with both cross-site and same-site requests. The Secure attribute must also be set when using this value.

25 token vectors × 128
15.089
2
SameSite=Lax

Send the cookie only for requests originating from the same site that set the cookie, and for cross-site requests that meet both of the following criteria:

30 token vectors × 128
14.742
3
SameSite=Strict

Send the cookie only for requests originating from the same site that set the cookie.

18 token vectors × 128
14.609
4
Partitioned

Indicates that the cookie should be stored using partitioned storage. Note that if this is set, the Secure directive must also be set.

28 token vectors × 128
14.594

The API returns 16 query token vectors and each passage’s token vectors; MaxSim and the ranking run in your code. Recorded 2026-09-15; MDN Web Docs, CC BY-SA 2.5.

Index 11,802 long articles for $2.11

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-default

Switch to SIE in 5 minutes

from openai import OpenAI

client = OpenAI()
model = "text-embedding-3-large"

chunks = [c for d in documents for c in split(d, size=1024, overlap=200)]
docs = client.embeddings.create(model=model, input=chunks)
query = client.embeddings.create(model=model, input=[question])
from pylate import models

model = models.ColBERT("lightonai/GTE-ModernColBERT-v1", document_length=8192)

docs = model.encode(documents, is_query=False)
query = model.encode([question], is_query=True)
SIE
from sie_sdk import SIEClient

client = SIEClient(api_key="sk-sie-…")
model = "lightonai/GTE-ModernColBERT-v1"
options = {"profile": "long_context"}  # whole documents, 8,192-token limit

docs = client.encode(
    model, [{"text": d} for d in documents],
    output_types=["multivector"], is_query=False, options=options,
)
query = client.encode(
    model, [{"text": question}],
    output_types=["multivector"], is_query=True, options=options,
)
from sie_sdk import SIEClient

client = SIEClient(api_key="sk-sie-…")
model = "lightonai/GTE-ModernColBERT-v1"
options = {"profile": "long_context"}  # whole documents, 8,192-token limit

docs = client.encode(
    model, [{"text": d} for d in documents],
    output_types=["multivector"], is_query=False, options=options,
)
query = client.encode(
    model, [{"text": question}],
    output_types=["multivector"], is_query=True, options=options,
)

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.