Model reference · open weights

glm-4-voice-of-reason

LLMs kyutai Omni (any→any) 1 build Its own licence terms 0 dl/mo

glm-4-voice-of-reason is an open-weight language model from kyutai. glm-4-voice-of-reason-9b (BF16) weighs 19.1 GB; the smallest configuration that runs it is 2× RTX 3060 12 GB.

For self-hosting, compare this build's requirements below with the GPU you plan to rent.

  • glm-4-voice-of-reason is a 9.5B parameter any-to-any speech-to-speech model developed by kyutai.
  • It was trained with reinforcement learning to reason before speaking, achieving a score of 0.706 on the GSM8K benchmark.
  • The model uses an interleaved format of text and audio tokens for its responses and inherits its license from the GLM-4-Voice base model.

Summary of the kyutai/glm-4-voice-of-reason-9b model card, 2026-10-01

What it is

Released bykyutai
Released2026-08-04
Parameters9.5B
VRAM19.1 GB for the weights

What it runs on

Memory and cards for glm-4-voice-of-reason-9b (BF16)

19.1 GBweights, file size
41 MBcache per 1K tokens
782 MBruntime overhead, at least
CardRequests at onceContext maxMemory
8K each32K each
RTX 3060 12 GB … RTX 4060 Ti 16 GB
2 smaller cards
RTX 3090 24 GB10284K23.4 GB
RTX 4090 24 GB10283K23.4 GB
RTX 5090 32 GB338128K31.0 GB
L40S 48 GB7117128K44.0 GB
A100 80 GB17343128K78.2 GB
H100 80 GB15939128K78.1 GB
RTX PRO 6000 Blackwell 96 GB20651128K93.8 GB
DGX Spark (GB10) 128 GB unified24761128K107 GB
H200 141 GB33884128K138 GB
B200 180 GB450112128K176 GB
2× RTX 3060 12 GB
tensor parallel
7161K11.6 GB a card
2× RTX 4060 Ti 16 GB
tensor parallel
307128K15.4 GB a card
2× RTX 4090 24 GB
tensor parallel
7719128K23.4 GB a card
Memory needed at each load
Requests at once8K tokens each32K tokens each
120.2 GB21.2 GB
521.5 GB26.6 GB
822.6 GB30.6 GB
1625.2 GB41.3 GB
3230.6 GB62.8 GB
6441.3 GB106 GB

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

From the model card

What kyutai says about glm-4-voice-of-reason

Read the model card

A speech-to-speech model that reasons before it speaks. GLM-4-Voice-9B trained with reinforcement learning against a binary LLM judge on math word problems — no supervised finetuning stage, the reasoning behaviour is learned from the reward alone.

Scores 0.706 on GSM8K (1310 test items, written channel, gpt-4o-2024-11-20 as judge).

Run it on a wav

The audio front end is GLM-4-Voice's, unchanged and not in this repo, so clone it for the speech tokenizer:

git clone https://github.com/THUDM/GLM-4-Voice
uv init glm-of-reason && cd glm-of-reason
uv add "transformers>=4.44,<4.48" torch torchaudio accelerate tiktoken soundfile

tiktoken is needed by the tokenizer's remote code and soundfile by torchaudio to read your file; both fail late and unhelpfully if missing. Save the script below as demo.py, point AUDIO at your wav — anything torchaudio can read, any sample rate — and run uv run demo.py:

import sys, torch
sys.path.insert(0, "../GLM-4-Voice")           # the clone, next to the project

from transformers import AutoModel, AutoTokenizer, WhisperFeatureExtractor
from speech_tokenizer.modeling_whisper import WhisperVQEncoder
from speech_tokenizer.utils import extract_speech_token

AUDIO = "question.wav"                                    # <-- your spoken question
REPO = "kyutai/glm-4-voice-of-reason-9b"

SYSTEM = (
    "User will provide you with a speech instruction. Do it step by step. "
    "First, think about the instruction and respond in a interleaved manner, "
    "with 13 text token followed by 26 audio tokens. "
)

tokenizer = AutoTokenizer.from_pretrained(REPO, trust_remote_code=True)
model = AutoModel.from_pretrained(
    REPO, torch_dtype=torch.bfloat16, device_map="cuda", trust_remote_code=True
).eval()

whisper = WhisperVQEncoder.from_pretrained("THUDM/glm-4-voice-tokenizer").eval().to("cuda")
features = WhisperFeatureExtractor.from_pretrained("THUDM/glm-4-voice-tokenizer")

audio_tokens = extract_speech_token(whisper, features, [AUDIO])[0]
user = "" + "".join(f"" for t in audio_tokens) + ""
prompt = f"\n{SYSTEM}\n{user}streaming_transcription\n"

inputs = tokenizer(prompt, return_tensors="pt").to("cuda")
out = model.generate(
    **inputs,
    max_new_tokens=1000,
    do_sample=False,
    pad_token_id=tokenizer.pad_token_id,
    eos_token_id=tokenizer.convert_tokens_to_ids(""),
)
new = out[0, inputs.input_ids.shape[1]:].tolist()

audio_offset = tokenizer.convert_tokens_to_ids("")
text = tokenizer.decode([t for t in new if t < audio_offset], skip_special_tokens=True)
speech_tokens = [t - audio_offset for t in new if t >= audio_offset]

print(text)

There is no hidden channel here: the model reasons in the answer it speaks, step by step, so text is the whole response. Its stitch sibling keeps the reasoning unspoken instead, wrapped in [SOPR] ... [EOPR].

speech_tokens are the audio codes of that answer; feed them to THUDM/glm-4-voice-decoder to get a waveform, or run the full duplex demo from the GLM-4-Voice repo with --model-path pointing here.

This script was run as printed, on one H100, with transformers 4.47.1 and torch 2.8.0. Pick a torch build that matches your driver: the newest wheel needs a newer CUDA than many clusters run.

License

Inherited from GLM-4-Voice; see the license link above.

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