… 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. …
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,802What rank was Sheehan granted when he was decommissioned?
Chunked embeddings put the wrong article first
OpenAI text-embedding-3-large, chunked
Wrong article firstWhat rank was Sheehan granted when he was decommissioned?
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.
- Anthropic Chunks cut off from their document fail retrieval; restoring the context cut failures by 35%
Introducing Contextual Retrieval: top-20 retrieval failures fell from 5.7% to 3.7% when each chunk carried its document’s context.
On par with voyage‑context‑4, ahead of Voyage 4 Large and OpenAI, at the lowest cost to index
| Model | Right document first | Cost to index 11,802 articles |
|---|---|---|
| SIE GTE ModernColBERT | 61.6% | $2.11 |
| voyage-context-4 | 64.1% | $10.15 |
| Voyage 4 Large | 55.6% | $9.88 |
| OpenAI 3-large, chunked | 52.2% | $12.76 |
| Cohere Embed v5 Pro | 44.2% | $9.47 |
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 npfrom sie_sdk import SIEClientclient = 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.Send the cookie with both cross-site and same-site requests. The Secure attribute must also be set when using this value.
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 only for requests originating from the same site that set the cookie.
Indicates that the cookie should be stored using partitioned storage. Note that if this is set, the Secure directive must also be set.
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
Serverless API
We host the models; you call one API.
- No idle GPUs, pay for what you use
- SOC 2 Type 2, US or EU data residency
- $50 of credit to start, no card required
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