Model reference · open weights

sarvam-m

LLMs sarvamai Text gen 1 build Open weights 4k dl/mo

sarvam-m is an open-weight language model from sarvamai. sarvam-m (BF16) weighs 47.1 GB; the smallest configuration that runs it is 2× RTX 5090 32 GB.

  • sarvam-m is a 23.6B parameter multilingual text-generation model developed by sarvamai and built on Mistral-Small.
  • It supports a 32,768 token context length and operates in English, Bengali, Hindi, kn, gu, mr, ml, or, pa, Tamil, and te.
  • The model features a hybrid thinking mode for logical reasoning and is released under the Apache-2.0 license.

Summary of the sarvamai/sarvam-m model card, 2026-10-01

What it is

Released bysarvamai
Released2025-05-20
Parameters23.6B
VRAM47.1 GB for the weights

What it runs on

Memory and cards for sarvam-m (BF16)

47.1 GBweights, file size
164 MBcache per 1K tokens
916 MBruntime overhead, at least
32,768 tokenscontext max
CardRequests at onceContext maxMemory
8K each32K each
RTX 3060 12 GB … L40S 48 GB
6 smaller cards
———
A100 80 GB225all 32K78.2 GB
H100 80 GB184all 32K78.1 GB
RTX PRO 6000 Blackwell 96 GB307all 32K93.8 GB
DGX Spark (GB10) 128 GB unified4010all 32K107 GB
H200 141 GB6315all 32K138 GB
B200 180 GB9022all 32K176 GB
2× RTX 5090 32 GB
tensor parallel
92all 32K31.0 GB a card
2× L40S 48 GB
tensor parallel
297all 32K44.0 GB a card
4× RTX 4090 24 GB
tensor parallel
317all 32K23.4 GB a card
4× RTX 3090 24 GB
tensor parallel
317all 32K23.4 GB a card
Memory needed at each load
Requests at once8K tokens each32K tokens each
149.4 GB53.4 GB
554.8 GB74.9 GB
858.8 GB91.0 GB
1669.5 GB134 GB
3291.0 GB220 GB
64134 GB392 GB

One card, with vLLM's small-card settings.

From the model card

What sarvamai says about sarvam-m

Read the model card

target="_blank" rel="noopener noreferrer"> src="https://img.shields.io/badge/🚀 Chat on Sarvam Playground-1488CC?style=for-the-badge&logo=rocket" alt="Chat on Sarvam Playground" />

Model Information

sarvam-m is a multilingual, hybrid-reasoning, text-only language model built on Mistral-Small. This post-trained version delivers exceptional improvements over the base model:

  • +20% average improvement on Indian language benchmarks
  • +21.6% enhancement on math benchmarks
  • +17.6% boost on programming benchmarks

Performance gains are even more impressive at the intersection of Indian languages and mathematics, with an outstanding +86% improvement in romanized Indian language GSM-8K benchmarks.

Learn more about sarvam-m in our detailed blog post.

Key Features

  • Hybrid Thinking Mode: A single versatile model supporting both "think" and "non-think" modes. Use the think mode for complex logical reasoning, mathematical problems, and coding tasks, or switch to non-think mode for efficient, general-purpose conversation.

  • Advanced Indic Skills: Specifically post-trained on Indian languages alongside English, embodying a character that authentically reflects and emphasizes Indian cultural values.

  • Superior Reasoning Capabilities: Outperforms most similarly-sized models on coding and math benchmarks, demonstrating exceptional reasoning abilities.

  • Seamless Chatting Experience: Full support for both Indic scripts and romanized versions of Indian languages, providing a smooth and accessible multilingual conversation experience.

Quickstart

The following code snippet demonstrates how to use sarvam-m using Transformers.

from transformers import AutoModelForCausalLM, AutoTokenizer

model_name = "sarvamai/sarvam-m"

# load the tokenizer and the model
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
    model_name, torch_dtype="auto", device_map="auto"
)

# prepare the model input
prompt = "Who are you and what is your purpose on this planet?"

messages = [{"role": "user", "content": prompt}]
text = tokenizer.apply_chat_template(
    messages,
    tokenize=False,
    enable_thinking=True,  # Switches between thinking and non-thinking modes. Default is True.
)

model_inputs = tokenizer([text], return_tensors="pt").to(model.device)

# conduct text completion
generated_ids = model.generate(**model_inputs, max_new_tokens=8192)
output_ids = generated_ids[0][len(model_inputs.input_ids[0]) :].tolist()
output_text = tokenizer.decode(output_ids)

if "" in output_text:
    reasoning_content = output_text.split("")[0].rstrip("\n")
    content = output_text.split("")[-1].lstrip("\n").rstrip("")
else:
    reasoning_content = ""
    content = output_text.rstrip("")

print("reasoning content:", reasoning_content)
print("content:", content)

[!NOTE] For thinking mode, we recommend temperature=0.5; for no-think mode, temperature=0.2.

With Sarvam APIs

from openai import OpenAI

base_url = "https://api.sarvam.ai/v1"
model_name = "sarvam-m"
api_key = "Your-API-Key"  # get it from https://dashboard.sarvam.ai/

client = OpenAI(
    base_url=base_url,
    api_key=api_key,
).with_options(max_retries=1)

messages = [
    {"role": "system", "content": "You're a helpful AI assistant"},
    {"role": "user", "content": "Explain quantum computing in simple terms"},
]

response1 = client.chat.completions.create(
    model=model_name,
    messages=messages,
    reasoning_effort="medium",  # Enable thinking mode. `None` for disable.
    max_completion_tokens=4096,
)
print("First response:", response1.choices[0].message.content)

# Building messages for the second turn (using previous response as context)
messages.extend(
    [
        {
            "role": "assistant",
            "content": response1.choices[0].message.content,
        },
        {"role": "user", "content": "Can you give an analogy for superposition?"},
    ]
)

response2 = client.chat.completions.create(
    model=model_name,
    messages=messages,
    reasoning_effort="medium",
    max_completion_tokens=8192,
)
print("Follow-up response:", response2.choices[0].message.content)

Refer to API docs here: sarvam Chat Completions API docs

reasoning_effort can take three possible values: low, medium, and high to be consistent with the OpenAI API spec. Setting any of the three values just enables the thinking mode of sarvam-m.

VLLM Deployment

For easy deployment, we can use vllm>=0.8.5 and create an OpenAI-compatible API endpoint with vllm serve sarvamai/sarvam-m.

If you want to use vLLM with python, you can do the following.

from openai import OpenAI

# Modify OpenAI's API key and API base to use vLLM's API server.
openai_api_key = "EMPTY"
openai_api_base = "http://localhost:8000/v1"

client = OpenAI(
    api_key=openai_api_key,
    base_url=openai_api_base,
)

models = client.models.list()
model = models.data[0].id

messages = [{"role": "user", "content": "Why is 42 the best number?"}]

# By default, thinking mode is enabled.
# If you want to disable thinking, add:
# extra_body={"chat_template_kwargs": {"enable_thinking": False}}
response = client.chat.completions.create(model=model, messages=messages)
output_text = response.choices[0].message.content

if "" in output_text:
    reasoning_content = output_text.split("")[0].rstrip("\n")
    content = output_text.split("")[-1].lstrip("\n")
else:
    reasoning_content = ""
    content = output_text

print("reasoning content:", reasoning_content)
print("content:", content)

# For the next round, add the model's response directly as assistant turn.
messages.append(
    {"role": "assistant", "content": output_text}
)

Quoted from the model card on Hugging Face. The full card is behind the Hugging Face link above.

© 2026 AxForge · EU-hosted AI infrastructure Pricing Docs Trust Privacy Terms