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

As accurate as GPT‑6.1 Sol at finding objects, 982x faster

Name the things you want found, such as cars, people or trees, and get back a box around each one. SIE runs Meta's open SAM 3 detector for you behind one API call.

SIE SAM 3

16 of 17 vehicles boxed

Asked for car, bus, truck

A drone photo of a road junction with queues of cars, with the 20 boxes SAM 3 returned in this part of the photo for car, bus, truck.

GPT‑6 Luna boxes 46% of the objects, Claude Sonnet 5.5 39%

GPT‑6 Luna, high reasoning

6 of 15 vehicles boxed

Asked for car, bus, truck

A drone photo of a motorway interchange with slip roads: a part of it with 15 vehicles, and the 14 boxes GPT-6 Luna at high reasoning returned there.
14 boxes in this view; 6 cover a vehicle by half or more, the other 8 sit partly off a vehicle. Whole photo: 16 of 41 vehicles, in 63.5 s.

Claude Sonnet 5.5, default settings

0 of 11 vehicles boxed

Asked for car, bus, truck

A drone photo of a road junction with queues of cars: a part of it with 11 vehicles, and the 24 boxes Claude Sonnet 5.5 at default settings returned there.
24 boxes in this view, none touching a vehicle. Whole photo: 0 of 42 vehicles, in 6.8 s.

Across 300 crowded photos, GPT‑6 Luna at high reasoning boxed 46% of the objects, Claude Sonnet 5.5 39% and Claude Haiku 5.5 34%. SIE SAM 3 boxed 73%.

More accurate than every model tested; only GPT‑6.1 Sol comes close

Objects boxed correctly
F1 F1 F1 F1 F1 ↑
SIE SAM 3
SIE SAM 3 0.62
GPT‑6.1 Sol high
GPT‑6.1 Sol high 0.60
Claude Sonnet 5.5
Claude Sonnet 5.5 0.39
GPT‑6 Luna high
GPT‑6 Luna high 0.36
Claude Haiku 5.5
0.31 Claude Haiku 5.5
GPT‑6.1 Sol high
GPT‑6.1 Sol high 0.92
SIE SAM 3
SIE SAM 3 0.87
Claude Sonnet 5.5
Claude Sonnet 5.5 0.81
GPT‑6 Luna high
GPT‑6 Luna high 0.76
Claude Haiku 5.5
Claude Haiku 5.5 0.75
GPT‑6.1 Sol high
GPT‑6.1 Sol high 0.81
SIE SAM 3
SIE SAM 3 0.77
GPT‑6 Luna high
0.42 GPT‑6 Luna high
Claude Haiku 5.5
0.25 Claude Haiku 5.5
Claude Sonnet 5.5
0.15 Claude Sonnet 5.5
GPT‑6.1 Sol high
GPT‑6.1 Sol high 0.50
SIE SAM 3
SIE SAM 3 0.49
Claude Sonnet 5.5
Claude Sonnet 5.5 0.32
GPT‑6 Luna high
0.18 GPT‑6 Luna high
Claude Haiku 5.5
0.16 Claude Haiku 5.5
SIE SAM 3
SIE SAM 3 0.35
Claude Sonnet 5.5
Claude Sonnet 5.5 0.27
GPT‑6.1 Sol high
0.19 GPT‑6.1 Sol high
Claude Haiku 5.5
0.08 Claude Haiku 5.5
GPT‑6 Luna high
0.08 GPT‑6 Luna high
Time and cost
seconds per photo USD per 1,000 photos ↓
SIE SAM 3
0.083 s SIE SAM 3
Claude Haiku 5.5
4.1 s Claude Haiku 5.5
Claude Sonnet 5.5
5.6 s Claude Sonnet 5.5
GPT‑6 Luna high
35.3 s GPT‑6 Luna high
GPT‑6.1 Sol high
GPT‑6.1 Sol high 80.7 s
SIE SAM 3
$0.25 SIE SAM 3
Claude Haiku 5.5
$0.76 Claude Haiku 5.5
GPT‑6 Luna high
$2.95 GPT‑6 Luna high
Claude Sonnet 5.5
$13.27 Claude Sonnet 5.5
GPT‑6.1 Sol high
GPT‑6.1 Sol high $59.98
Crowded-photo evaluation

300 crowded photos, 17,222 objects, four current OpenAI and Anthropic models

Photos
Traffic, parking lots, people and trees from drones and aircraft, four public benchmarks, 21+ objects each
Scoring
A box counts when its name is right and it covers the object by half. F1 is 1 when every object is boxed and no box is false. All is the mean of the four sets
Settings
SAM 3 at its shipped threshold. GPT‑6.1 Sol and GPT‑6 Luna at high reasoning, Claude at default settings, each photo at full resolution. GPT‑6 Luna at default reasoning scored the same as at high
Time
Median per photo. SIE timed on a GPU server (RTX PRO 6000) with the client alongside; the others over their public APIs from one client in San Francisco
Cost
Per 1,000 photos: SAM 3 $0.25 at SIE’s Serverless rate, GPT‑6.1 Sol $59.98. The others are at list price on the tokens each used

Send a photo and the names to count, get a box for each one

from pathlib import Path
from sie_sdk import SIEClient
​
client = SIEClient(api_key="API keysk-sie-…")
​
image = {"data": Path(imagejunction.jpgbrowse).read_bytes(), "format": "jpeg"}
result = client.extract(
"modelfacebook/sam3",
{"images": [image]},
labels=[
"labelcar",
"labelbus",
"labeltruck",
],
)
for obj in result["objects"]:
print(obj["label"], obj["score"], obj["bbox"])
import { readFile } from 'node:fs/promises';
import { SIEClient } from '@superlinked/sie-sdk';

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

const image = await readFile("junction.jpg");
const result = await client.extract(
  'facebook/sam3',
  { images: [image] },
  { labels: ["car","bus","truck"] },
);
console.log(result.objects);
images_bytes=$(base64 < 'junction.jpg' | tr -d '\n')
curl https://api.superlinked.com/v1/extract/facebook%2Fsam3 \
  -H "Authorization: Bearer sk-sie-…" \
  -H "Content-Type: application/json" \
  -d "{\"items\":[{\"images\":[{\"data\":\"$images_bytes\",\"format\":\"jpeg\"}]}],\"params\":{\"labels\":[\"car\",\"bus\",\"truck\"]}}"
Build the "Detect" 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: facebook/sam3 (SIE primitive: /extract). Keep the model id configurable.

Task
- Input: an uploaded image plus the object labels to find.
- Behaviour: return the named objects with confidence scores and bounding boxes
- 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

51 objects returned for car, bus, truck

A drone photo of a road junction with queues of cars, with the 51 boxes SAM 3 returned for car, bus, truck.
labelscorebbox [x, y, w, h]
car0.885[3267, 363, 49, 46]
car0.877[3354, 459, 45, 50]
car0.875[3544, 1203, 49, 42]
car0.872[2370, 446, 51, 56]
car0.860[2722, 1377, 56, 31]
car0.857[282, 787, 60, 29]

and 45 more, highest score first. Score is SAM 3's own match score, not a probability.

Start finding objects in your photos

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 -e HF_TOKEN ghcr.io/superlinked/sie-server:latest-cuda12-transformers5

Switch to SIE in 5 minutes

from openai import OpenAI

client = OpenAI()
resp = client.chat.completions.create(
    model="gpt-6-luna",
    messages=messages,
    response_format=schema,
)
objects = json.loads(resp.choices[0].message.content)["objects"]
from google import genai

client = genai.Client()
resp = client.models.generate_content(
    model="gemini-3.8-flash",
    contents=[image, prompt],
    config=config,
)
objects = json.loads(resp.text)
import boto3

client = boto3.client("rekognition")
resp = client.detect_labels(Image={"Bytes": image_bytes})
# Rekognition's own label list; boxes only for the labels it knows
objects = [
    (label["Name"], box["BoundingBox"])
    for label in resp["Labels"]
    for box in label.get("Instances", [])
]
SIE
from sie_sdk import SIEClient

client = SIEClient(api_key="YOUR_SIE_API_KEY")
result = client.extract(
    "facebook/sam3",
    {"images": [image_bytes]},
    labels=["car", "bus", "truck"],
)
objects = result["objects"]
from sie_sdk import SIEClient

client = SIEClient(api_key="YOUR_SIE_API_KEY")
result = client.extract(
    "facebook/sam3",
    {"images": [image_bytes]},
    labels=["car", "bus", "truck"],
)
objects = result["objects"]
from sie_sdk import SIEClient

client = SIEClient(api_key="YOUR_SIE_API_KEY")
result = client.extract(
    "facebook/sam3",
    {"images": [image_bytes]},
    labels=["car", "bus", "truck"],
)
objects = result["objects"]

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.