Models
Serenity Edge serves two families of chat models: Orion, Serenity's own model line, and a set of open models addressed by their published names. It also serves decision models and the models of the embeddings, rerank and redaction routes, each on its own endpoint.
Catalogue
The table is read from GET /v1/models when this page is published and again when you open it, so it shows what the API serves right now; the line under it says when it was read.
| Model id | Family | Context | Max output | Capabilities |
|---|---|---|---|---|
orion-proOrion Pro | Orion | 262,144 | 32,768 | StreamingTool callingStructured outputsReasoningPrefix caching |
orion-plusOrion Plus | Orion | 262,144 | 32,768 | StreamingTool callingStructured outputsReasoningPrefix caching |
qwen3.8-27bQwen3.8 27B | Open | 262,144 | 32,768 | StreamingTool callingStructured outputsReasoningPrefix caching |
qwen3.6-35b-a3bQwen3.6 35B A3B | Open | 262,144 | 32,768 | StreamingTool callingStructured outputsReasoningPrefix caching |
paddleocr-vl-1.6PaddleOCR-VL 1.6 | Open | 16,384 | 8,192 | Streaming |
Read from the API (GET /v1/models) when this page was published, on 6 November 2026, 19:49 UTC.
Pricing is listed on Pricing and limits. Use GET /v1/models to retrieve the catalogue programmatically; see List models.
Two families
Orion
orion-pro and orion-plus are the Orion family, Serenity's own model line. Each id is the configuration that Substrate AI recommends and maintains for a kind of workload (sampling defaults, prompt handling and serving configuration tuned for it): orion-plus for volume and latency, orion-pro for depth. Address the Orion ids to follow that recommended configuration and to benefit from future improvements without changing your code.
Substrate AI is preparing fine-tuned Orion models. When they ship, the orion-pro and orion-plus ids will resolve to them; the change will be announced in the release notes in advance.
Open models
qwen3.8-27b and qwen3.6-35b-a3b are general-purpose open models, served as published by their authors. Use these ids when you want to address an open model by its own name, for example to compare results with other providers.
paddleocr-vl-1.6 is an open model for reading document pages: see Document OCR.
Choosing between pro and plus
- Start with
orion-plus. It is the fast, inexpensive option and handles most conversational, classification and extraction workloads well. - Move to
orion-prowhen the task needs more depth: long multi-document reasoning, strict adherence to complex instructions, or reliable multi-step tool calling.
The Orion models, qwen3.8-27b and qwen3.6-35b-a3b support streaming, tool calling, structured outputs and reasoning; paddleocr-vl-1.6 supports streaming only. The catalogue above shows the capabilities of each one. See the API reference for the full parameter list.
Image input
Every chat model reads images as well as text. Send them in a user message as image_url parts whose url is a base64 data URL (data:image/png;base64,...; PNG, JPEG, WebP or GIF), up to the model's limit per request:
{"role": "user", "content": [
{"type": "text", "text": "What does this chart show?"},
{"type": "image_url", "image_url": {"url": "data:image/png;base64,iVBORw0KGgo..."}}
]}
| Model | Images per request |
|---|---|
orion-pro | 8 |
orion-plus | 8 |
qwen3.8-27b | 8 |
qwen3.6-35b-a3b | 8 |
paddleocr-vl-1.6 | 1 |
Images count as input tokens and are billed at the model's input price. Image URLs are not fetched: a part with an http or https URL, more images than the model reads, or video, audio or file parts are refused with HTTP 400 (invalid_request_error, with the offending param). Images are counted over the whole conversation, earlier turns included: too many images carry the code too_many_images, so in a long conversation send only the most recent images and replace the older ones with a short text. Each model's limit is supported_inputs.references.max of its image input modality in GET /v1/models. The request body limit of 4 MB applies to the base64 data.
Document OCR
paddleocr-vl-1.6 (aliases baidu/paddleocr-vl-1.6 and paddlepaddle/paddleocr-vl-1.6) is PaddleOCR-VL 1.6, an open vision-language model for documents. It reads one page image and returns the page's text, a table, a formula or the data of a chart, depending on the task prompt you send with the image. It is a chat model: call it with POST /v1/chat/completions.
Send one user message with the page as an image_url part (a base64 data URL, as in Image input) followed by a text part with one of these task prompts, exactly as written:
| Task prompt | What the answer contains |
|---|---|
OCR: | The text of the page |
Table Recognition: | The table in the image |
Formula Recognition: | The formula in the image |
Chart Recognition: | The data of the chart in the image |
curl https://api.serenityedge.ai/v1/chat/completions \
-H "Authorization: Bearer $SERENITY_EDGE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "paddleocr-vl-1.6",
"messages": [
{"role": "user", "content": [
{"type": "image_url", "image_url": {"url": "data:image/png;base64,iVBORw0KGgo..."}},
{"type": "text", "text": "OCR:"}
]}
]
}'
With the OpenAI Python library, read the page from a file and encode it:
import base64
from openai import OpenAI
client = OpenAI(
base_url="https://api.serenityedge.ai/v1",
api_key="YOUR_SERENITY_EDGE_API_KEY",
)
with open("page-1.png", "rb") as image:
page = base64.b64encode(image.read()).decode("ascii")
completion = client.chat.completions.create(
model="paddleocr-vl-1.6",
messages=[
{
"role": "user",
"content": [
{"type": "image_url", "image_url": {"url": f"data:image/png;base64,{page}"}},
{"type": "text", "text": "OCR:"},
],
}
],
)
print(completion.choices[0].message.content)
What to know about this model:
- One image per request. A second image is refused with HTTP 400 (
invalid_request_error,code: "too_many_images",param: "messages",This model reads at most 1 image(s) per request.). Send a document of several pages as one request per page; the requests can run in parallel. - Temperature 0 by default. Without a
temperaturein the request, the model decodes greedily, which keeps transcriptions stable. Atemperatureyou send is used as is. - Text in, text out. The model does not reason, call tools or produce structured outputs: send the image and the task prompt, and read the answer from
choices[0].message.content. If a transcription reaches the model's maximum output, shown in the catalogue, the answer ends withfinish_reason: "length". - Billing. The image counts as prompt tokens: a full page is about 1,250 prompt tokens. Prompt and completion tokens are billed at the prices on Pricing and limits. In our measurements of 13 October 2026, a full page took 1,243 to 1,273 prompt tokens and was answered in 221 to 312 ms of server time, without the network.
- Access. Call
paddleocr-vl-1.6directly on the API athttps://api.serenityedge.ai/v1. Since 2026-10-14 it is also ready for the OpenRouter onboarding, which is not live yet. - Output length. A
max_tokensormax_completion_tokensabove 8,192, the model's maximum output, is clamped to 8,192 rather than refused.
Precision
The Orion models, qwen3.8-27b and qwen3.6-35b-a3b run in NVFP4, a 4-bit floating-point format for NVIDIA GPUs. It is the standard serving precision on Serenity Edge and is what the published prices assume. paddleocr-vl-1.6 runs in BF16, the precision of its published weights.
Decision models
Decision models are in public preview. Their availability will be announced in the release notes.
Decision models answer typed questions (yes or no, one of several options, a level on a scale) with calibrated probabilities instead of generating text, on their own endpoints: POST /v1/decisions and POST /v1/systemone. They are not chat models and are not listed in the catalogue above. orion-compass is for questions that need more depth; orion-compass-flash is for the lowest latency and price at volume. See Decisions for when to use them and how.
The table is read from GET /v1/models?format=openai when this page is published and again when you open it.
| Model id | Context | Reads | Input | Output | Endpoints |
|---|---|---|---|---|---|
d3also vllm-sr/d3 | 24,576 | textimage | $0.042 | Free | /v1/decisions/v1/systemone |
orion-compassalias of orion-compass-26.1 | 32,000 | text | $0.034 | Free | /v1/decisions/v1/systemone |
orion-compass-flashalias of orion-compass-flash-26.1 | 32,000 | textimage | $0.017 | Free | /v1/decisions/v1/systemone |
Read from the API (GET /v1/models?format=openai) when this page was published, on 6 November 2026, 19:49 UTC.
Embeddings, rerank and redaction
Three more models are served on their own routes, for search, retrieval-augmented generation and privacy: qwen3-embedding-0.6b on POST /v1/embeddings (vectors in OpenAI's format), qwen3-reranker-0.6b on POST /v1/rerank (relevance scores in the format of Cohere and Jina) and privacy-filter on POST /v1/redact (personal data found and masked). They are not chat models and are not listed in the catalogue above. See Embeddings, rerank and redaction for how to call them.
The table is read from GET /v1/models?format=openai when this page is published and again when you open it. Prices are in US dollars per million input tokens.
| Model id | Input | Endpoint |
|---|---|---|
privacy-filteralso openai/privacy-filter | $0.009 | /v1/redact |
qwen3-embedding-0.6balso qwen/qwen3-embedding-0.6b | $0.008 | /v1/embeddings |
qwen3-reranker-0.6balso qwen/qwen3-reranker-0.6b | $0.008 | /v1/rerank |
Read from the API (GET /v1/models?format=openai) when this page was published, on 6 November 2026, 19:49 UTC.