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

Find 66% more of your entities than AWS Comprehend, for 99% less

Name the kinds of things you need from your text, such as universities, scientists or dishes, and get every match back at its exact position. SIE, an open-source inference engine, runs the entity model: no examples to label, no model to train.

SIE · NuNER Zero-span

Every entity found

He studied physics at the University of Heidelberg , the University of Lausanne , and , ultimately , the Humboldt University of Berlin under Max Planck .

CrossNER science (MIT licence) ↗
Tags
Discipline
physics
University
University of Heidelberg
University of Lausanne
Humboldt University of Berlin
Scientist
Max Planck

Fixed-type detectors answer in their own types, not yours

He studied physics at the University of Heidelberg , the University of Lausanne , and , ultimately , the Humboldt University of Berlin under Max Planck .

Asked for: discipline, university, scientist and 14 more types

AWS Comprehend

Answers in ORGANIZATION and PERSON
ORGANIZATION
University of Heidelberg
University of Lausanne
Humboldt University of Berlin
Planck
PERSON
Max

spaCy en_core_web_trf

Answers in ORG and PERSON
ORG
the University of Heidelberg
the University of Lausanne
the Humboldt University of Berlin
PERSON
Max Planck

SIE · NuNER Zero-span

Every entity found
discipline
physics
university
University of Heidelberg
University of Lausanne
Humboldt University of Berlin
scientist
Max Planck

Keep the spans each reply typed university

AWS Comprehend finds 0 of 3spaCy finds 0 of 3 SIE finds 3 of 3

AWS's way to get your own types: train a custom recognizer from at least 25 annotated plain-text examples or entity-list matches of each type (for PDFs, 100 per type across at least 250 documents), at $3 an hour, then pay $1,296 every 30 days to keep a real-time endpoint running at one inference unit. Comprehend quotas ↗ Comprehend pricing ↗

More accurate than AWS Comprehend, 31× cheaper than GPT-6 Luna

Accuracy against cost
652 sentences
Entities found (F1) ↑ Cost per million sentences →
Exact-span F1 against list price per million sentences like these: SIE 63.0% at $1.38; GPT-6 Luna, no reasoning 66.1% at $42; GPT-6 Luna, high reasoning 69.4% at $159; Claude Haiku 5.5 73.7% at $183; GPT-6.1 Sol 79.2% at $2,160; Claude Sonnet 5.5 79.6% at $1,804; AWS Comprehend 39.0% at $307.
ModelEntities found (F1)Cost per million sentences
SIE NuNER Zero-span63.0%$1.38
GPT-6 Luna, no reasoning66.1%$42
GPT-6 Luna, high reasoning69.4%$159
Claude Haiku 5.573.7%$183
GPT-6.1 Sol79.2%$2,160
Claude Sonnet 5.579.6%$1,804
AWS Comprehend39.0%$307
Custom entity types

652 sentences from seven public benchmark sets, 2,468 entities, each set with its own types

Scoring
Exact span and type against each set’s labels (F1); Comprehend types mapped on development data
LLMs
Each at its best-scoring setting; GPT-6 Luna also at its cheapest
Cost
Standard list prices, one sentence per request; Comprehend at its first tier with its 300-character minimum. On long text at its cheapest tier, SIE costs 95% less.
Recorded
SIE 9 Oct 2026; Comprehend 30 Sept 2026; LLMs 30 Sept 2026 to 13 Oct 2026, at list prices read 12 Oct 2026

Get typed spans and exact offsets

from sie_sdk import SIEClient
​
client = SIEClient(api_key="API keysk-sie-…")
​
result = client.extract(
"modelnumind/NuNER_Zero-span",
{"text": "textHe studied physics at the University of Heidelberg , the University of Lausanne , and , ultimately , the Humboldt University of Berlin under Max Planck ."},
labels=[
"labelmiscellaneous",
"labelorganisation",
"labelperson", "labelcountry",
"labellocation", "labelevent",
"labelaward", "labeluniversity",
"labelacademic journal",
"labelastronomical object",
"labelchemical compound",
"labelchemical element",
"labeldiscipline", "labelenzyme",
"labelprotein", "labelscientist",
"labeltheory",
],
options={"threshold":0.5},
)
for span in result["entities"]:
print(span["label"], span["text"])
import { SIEClient } from '@superlinked/sie-sdk';

const client = new SIEClient(undefined, { apiKey: 'sk-sie-…' });

const result = await client.extract(
  'numind/NuNER_Zero-span',
  { text: "He studied physics at the University of Heidelberg , the University of Lausanne , and , ultimately , the Humboldt University of Berlin under Max Planck ." },
  { labels: ["miscellaneous","organisation","person","country","location","event","award","university","academic journal","astronomical object","chemical compound","chemical element","discipline","enzyme","protein","scientist","theory"], adapterOptions: {"threshold":0.5} },
);
console.log(result.entities);
curl https://api.superlinked.com/v1/extract/numind%2FNuNER_Zero-span \
  -H "Authorization: Bearer sk-sie-…" \
  -H "Content-Type: application/json" \
  -d "{\"items\":[{\"text\":\"He studied physics at the University of Heidelberg , the University of Lausanne , and , ultimately , the Humboldt University of Berlin under Max Planck .\"}],\"params\":{\"labels\":[\"miscellaneous\",\"organisation\",\"person\",\"country\",\"location\",\"event\",\"award\",\"university\",\"academic journal\",\"astronomical object\",\"chemical compound\",\"chemical element\",\"discipline\",\"enzyme\",\"protein\",\"scientist\",\"theory\"],\"options\":{\"threshold\":0.5}}}"
Build the "Named entities" 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: numind/NuNER_Zero-span (SIE primitive: /extract). Keep the model id configurable.

Task
- Input: a block of text.
- Behaviour: return the named entities found in the text with their types
- Call the selected SIE primitive once per request and map the response into your domain type.

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

Spanstart–end

Discipline
physics11–18
University
University of Heidelberg26–50
University of Lausanne57–79
Humboldt University of Berlin105–134
Scientist
Max Planck141–151

Tag your own entity types wherever your text lives

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

import boto3

comprehend = boto3.client("comprehend")
response = comprehend.detect_entities(
    Text=text, LanguageCode="en",
)
# Comprehend's nine built-in types; your own need a trained custom recognizer
entities = response["Entities"]
import json
from openai import OpenAI

client = OpenAI(api_key="sk-…")
response = client.responses.create(
    model="gpt-6-luna", input=messages,
    text={"format": {"type": "json_schema", "name": "entities",
                     "strict": True, "schema": schema}},
)
entities = json.loads(response.output_text)["entities"]
SIE
from sie_sdk import SIEClient

client = SIEClient(api_key="sk-sie-…")
entities = client.extract(
    "numind/NuNER_Zero-span",
    {"text": text},
    labels=["discipline", "university", "scientist"],  # your types
)["entities"]
from sie_sdk import SIEClient

client = SIEClient(api_key="sk-sie-…")
entities = client.extract(
    "numind/NuNER_Zero-span",
    {"text": text},
    labels=["discipline", "university", "scientist"],  # your types
)["entities"]

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.