Model reference · open weights
Apriel-1.6-Thinker is an open-weight language model from ServiceNow-AI. Apriel-1.6-15b-Thinker (BF16) weighs 29.7 GB; the smallest configuration that runs it is L40S 48 GB.
Summary of the ServiceNow-AI/Apriel-1.6-15b-Thinker model card, 2026-10-01
What it is
| Released by | ServiceNow-AI |
|---|---|
| Released | 2025-11-28 |
| Parameters | 14.9B |
| VRAM | 29.7 GB for the weights |
What it runs on
| Card | Requests at once | Context max | Memory | |
|---|---|---|---|---|
| 8K each | 32K each | |||
| RTX 3060 12 GB … RTX 5090 32 GB 5 smaller cards | — | — | — | |
| L40S 48 GB | 7 | 1 | 60K | 44.0 GB |
| A100 80 GB | 28 | 7 | 230K | 78.2 GB |
| H100 80 GB | 26 | 6 | 209K | 78.1 GB |
| RTX PRO 6000 Blackwell 96 GB | 35 | 8 | all 256K | 93.8 GB |
| DGX Spark (GB10) 128 GB unified | 44 | 11 | all 256K | 107 GB |
| H200 141 GB | 63 | 15 | all 256K | 138 GB |
| B200 180 GB | 86 | 21 | all 256K | 176 GB |
| 2× RTX 3090 24 GB tensor parallel | 8 | 2 | 64K | 23.4 GB a card |
| 2× RTX 5090 32 GB tensor parallel | 17 | 4 | 140K | 31.0 GB a card |
| 2× L40S 48 GB tensor parallel | 33 | 8 | all 256K | 44.0 GB a card |
| 4× RTX 4090 24 GB tensor parallel | 34 | 8 | all 256K | 23.4 GB a card |
| Requests at once | 8K tokens each | 32K tokens each |
|---|---|---|
| 1 | 33.4 GB | 38.2 GB |
| 5 | 39.8 GB | 64.0 GB |
| 8 | 44.7 GB | 83.3 GB |
| 16 | 57.6 GB | 135 GB |
| 32 | 83.3 GB | 238 GB |
| 64 | 135 GB | 444 GB |
One card, with vLLM's small-card settings.
From the model card
Apriel-1.6-15B-Thinker is an updated multimodal reasoning model in ServiceNow’s Apriel SLM series, building on Apriel-1.5-15B-Thinker. With significantly improved text and image reasoning capabilities, Apriel-1.6 achieves competitive performance against models up to 10x its size. Like its predecessor, it benefits from extensive continual pre-training across both text and image domains. We additionally perform post-training that focuses on Supervised Finetuning (SFT) and Reinforcement Learning (RL). Apriel-1.6 obtains frontier performance without sacrificing reasoning token efficiency. The model improves or maintains task performance when compared with Apriel-1.5-15B-Thinker, while reducing reasoning token usage by more than 30%.
Highlights
, , [BEGIN FINAL RESPONSE], ``) for easier output parsing.Please see our blog post for more details
* This score is with DCA enabled. Without this, the model scores 36.
** The average score is calculated using all benchmarks except BFCL v3 Only and DeepResearchBench, since some models do not have scores for these two benchmarks.
*** AA LCR score for o3-mini-high is projected score based on its AA Index score.
The Apriel family of models are designed for a variety of general-purpose instruction tasks, including:
They are not intended for use in safety-critical applications without human oversight or in scenarios requiring guaranteed factual accuracy.
pip install transformers
Here is a code snippet demonstrating the model's usage with the transformers library's generate function:
# Tested with transformers==4.48
import re
import requests
import torch
from PIL import Image
from transformers import AutoProcessor, AutoModelForImageTextToText
# Load model
model_id = "ServiceNow-AI/Apriel-1.6-15b-Thinker"
model = AutoModelForImageTextToText.from_pretrained(
model_id,
torch_dtype=torch.bfloat16,
device_map="auto"
)
processor = AutoProcessor.from_pretrained(model_id)
# Example 1: Text-only prompt
chat = [
{
"role": "user",
"content": [
{"type": "text", "text": "What is the capital for France?"},
],
}
]
inputs = processor.apply_chat_template(chat, add_generation_prompt=True, tokenize=True, return_dict=True, return_tensors="pt")
inputs = {k: v.to(model.device) if isinstance(v, torch.Tensor) else v for k, v in inputs.items()}
inputs.pop("token_type_ids", None)
with torch.no_grad():
output_ids = model.generate(**inputs, max_new_tokens=1024, do_sample=True, temperature=0.6)
generated_ids = output_ids[:, inputs['input_ids'].shape[1]:]
output = processor.decode(generated_ids[0], skip_special_tokens=True)
response = re.findall(r"\[BEGIN FINAL RESPONSE\](.*?)(?:)", output, re.DOTALL)[0].strip()
print("Text-only Response:", response)
# Example 2: Image understanding
url = "https://picsum.photos/id/237/200/300"
image = Image.open(requests.get(url, stream=True).raw).convert("RGB")
chat = [
{
"role": "user",
"content": [
{"type": "text", "text": "Which animal is this?"},
{"type": "image"},
],
}
]
prompt = processor.apply_chat_template(chat, add_generation_prompt=True, tokenize=False)
inputs = processor(text=prompt, images=[image], return_tensors="pt").to(model.device)
with torch.no_grad():
output_ids = model.generate(**inputs, max_new_tokens=1024, do_sample=True, temperature=0.6)
generated_ids = output_ids[:, inputs['input_ids'].shape[1]:]
output = processor.decode(generated_ids[0], skip_special_tokens=True)
response = re.findall(r"\[BEGIN FINAL RESPONSE\](.*?)(?:)", output, re.DOTALL)[0].strip()
print("Image Response:", response)
0.6.Here are my reasoning steps:\n during all our evaluations. This is implemented in the default chat template.`
Quoted from the model card on Hugging Face. The full card is behind the Hugging Face link above.