Views
No views yet
| Name | cohere-transcribe-03-2026 |
|---|---|
| Architecture | conformer-based encoder-decoder |
| Input | audio waveform → log-Mel spectrogram. Audio is automatically resampled to 16kHz if necessary during preprocessing. Similarly, multi-channel (stereo) inputs are averaged to produce a single channel signal. |
| Output | transcribed text |
| Model size | 2B |
| Model | a large Conformer encoder extracts acoustic representations, followed by a lightweight Transformer decoder for token generation |
| Training objective | supervised cross-entropy on output tokens; trained from scratch |
| Languages |
Trained on 14 languages:
|
| License | Apache 2.0 |
transformers. This is the recommended way to use the model for
offline inference. For online inference, see the vLLM integration example below.1pip install transformers>=5.4.0 torch huggingface_hub soundfile librosa sentencepiece protobuf
2pip install datasets # only needed for long-form and non-English examplestorch==2.10.0 but it is expected to work with other versions.1from transformers import AutoProcessor, CohereAsrForConditionalGeneration
2from transformers.audio_utils import load_audio
3from huggingface_hub import hf_hub_download
4
5processor = AutoProcessor.from_pretrained("CohereLabs/cohere-transcribe-03-2026")
6model = CohereAsrForConditionalGeneration.from_pretrained("CohereLabs/cohere-transcribe-03-2026", device_map="auto")
7
8audio_file = hf_hub_download(
9 repo_id="CohereLabs/cohere-transcribe-03-2026",
10 filename="demo/voxpopuli_test_en_demo.wav",
11)
12audio = load_audio(audio_file, sampling_rate=16000)
13
14inputs = processor(audio, sampling_rate=16000, return_tensors="pt", language="en")
15inputs.to(model.device, dtype=model.dtype)
16
17outputs = model.generate(**inputs, max_new_tokens=256)
18text = processor.decode(outputs, skip_special_tokens=True)
19print(text)max_audio_clip_s, the feature extractor automatically splits the waveform into chunks.
The processor reassembles the per-chunk transcriptions using the returned audio_chunk_index.1from transformers import AutoProcessor, CohereAsrForConditionalGeneration
2from datasets import load_dataset
3import time
4
5processor = AutoProcessor.from_pretrained("CohereLabs/cohere-transcribe-03-2026")
6model = CohereAsrForConditionalGeneration.from_pretrained("CohereLabs/cohere-transcribe-03-2026", device_map="auto")
7
8ds = load_dataset("distil-whisper/earnings22", "full", split="test", streaming=True)
9sample = next(iter(ds))
10
11audio_array = sample["audio"]["array"]
12sr = sample["audio"]["sampling_rate"]
13duration_s = len(audio_array) / sr
14print(f"Audio duration: {duration_s / 60:.1f} minutes")
15
16inputs = processor(audio=audio_array, sampling_rate=sr, return_tensors="pt", language="en")
17audio_chunk_index = inputs.get("audio_chunk_index")
18inputs.to(model.device, dtype=model.dtype)
19
20start = time.time()
21outputs = model.generate(**inputs, max_new_tokens=256)
22text = processor.decode(outputs, skip_special_tokens=True, audio_chunk_index=audio_chunk_index, language="en")[0]
23elapsed = time.time() - start
24rtfx = duration_s / elapsed
25print(f"Transcribed in {elapsed:.1f}s — RTFx: {rtfx:.1f}")
26print(f"Transcription ({len(text.split())} words):")
27print(text[:500] + "...")punctuation=False to obtain lower-cased output without punctuation marks.1inputs_pnc = processor(audio, sampling_rate=16000, return_tensors="pt", language="en", punctuation=True)
2inputs_nopnc = processor(audio, sampling_rate=16000, return_tensors="pt", language="en", punctuation=False)1from transformers import AutoProcessor, CohereAsrForConditionalGeneration
2from transformers.audio_utils import load_audio
3
4processor = AutoProcessor.from_pretrained("CohereLabs/cohere-transcribe-03-2026")
5model = CohereAsrForConditionalGeneration.from_pretrained("CohereLabs/cohere-transcribe-03-2026", device_map="auto")
6
7audio_short = load_audio(
8 "https://huggingface.co/datasets/hf-internal-testing/dummy-audio-samples/resolve/main/bcn_weather.mp3",
9 sampling_rate=16000,
10)
11audio_long = load_audio(
12 "https://huggingface.co/datasets/hf-internal-testing/dummy-audio-samples/resolve/main/obama_first_45_secs.mp3",
13 sampling_rate=16000,
14)
15
16inputs = processor([audio_short, audio_long], sampling_rate=16000, return_tensors="pt", language="en")
17audio_chunk_index = inputs.get("audio_chunk_index")
18inputs.to(model.device, dtype=model.dtype)
19
20outputs = model.generate(**inputs, max_new_tokens=256)
21text = processor.decode(
22 outputs, skip_special_tokens=True, audio_chunk_index=audio_chunk_index, language="en"
23)
24print(text)1from transformers import AutoProcessor, CohereAsrForConditionalGeneration
2from datasets import load_dataset
3
4processor = AutoProcessor.from_pretrained("CohereLabs/cohere-transcribe-03-2026")
5model = CohereAsrForConditionalGeneration.from_pretrained("CohereLabs/cohere-transcribe-03-2026", device_map="auto")
6
7ds = load_dataset("google/fleurs", "ja_jp", split="test", streaming=True)
8ds_iter = iter(ds)
9samples = [next(ds_iter) for _ in range(3)]
10
11for sample in samples:
12 audio = sample["audio"]["array"]
13 sr = sample["audio"]["sampling_rate"]
14
15 inputs = processor(audio, sampling_rate=sr, return_tensors="pt", language="ja")
16 inputs.to(model.device, dtype=model.dtype)
17
18 outputs = model.generate(**inputs, max_new_tokens=256)
19 text = processor.decode(outputs, skip_special_tokens=True)
20 print(f"REF: {sample['transcription']}\nHYP: {text}\n")1uv venv --python 3.12 --seed
2source .venv/bin/activate
3
4uv pip install -U vllm==0.19.0 --torch-backend=auto
5uv pip install vllm[audio]
6uv pip install librosavllm serve CohereLabs/cohere-transcribe-03-2026 --trust-remote-code1curl -v -X POST http://localhost:8000/v1/audio/transcriptions \
2 -H "Authorization: Bearer $VLLM_API_KEY" \
3-F "file=@$(realpath ${AUDIO_PATH})" \
4-F "model=CohereLabs/cohere-transcribe-03-2026"| Model | Average WER | AMI | Earnings 22 | Gigaspeech | LS clean | LS other | SPGISpeech | Tedlium | Voxpopuli |
|---|---|---|---|---|---|---|---|---|---|
| Cohere Transcribe | 5.42 | 8.15 | 10.84 | 9.33 | 1.25 | 2.37 | 3.08 | 2.49 | 5.87 |
| Zoom Scribe v1 | 5.47 | 10.03 | 9.53 | 9.61 | 1.63 | 2.81 | 1.59 | 3.22 | 5.37 |
| IBM Granite 4.0 1B Speech | 5.52 | 8.44 | 8.48 | 10.14 | 1.42 | 2.85 | 3.89 | 3.10 | 5.84 |
| NVIDIA Canary Qwen 2.5B | 5.63 | 10.19 | 10.45 | 9.43 | 1.61 | 3.10 | 1.90 | 2.71 | 5.66 |
| Qwen3-ASR-1.7B | 5.76 | 10.56 | 10.25 | 8.74 | 1.63 | 3.40 | 2.84 | 2.28 | 6.35 |
| ElevenLabs Scribe v2 | 5.83 | 11.86 | 9.43 | 9.11 | 1.54 | 2.83 | 2.68 | 2.37 | 6.80 |
| Kyutai STT 2.6B | 6.40 | 12.17 | 10.99 | 9.81 | 1.70 | 4.32 | 2.03 | 3.35 | 6.79 |
| OpenAI Whisper Large v3 | 7.44 | 15.95 | 11.29 | 10.02 | 2.01 | 3.91 | 2.94 | 3.86 | 9.54 |
| Voxtral Mini 4B Realtime 2602 | 7.68 | 17.07 | 11.84 | 10.38 | 2.08 | 5.52 | 2.42 | 3.79 | 8.34 |


transformers (see Quick Start above).vLLM (see vLLM integration above).mlx-audio for Apple Silicon.cohere_transcribe_rstransformers.js and WebGPU)cohere_transcribe_extensionnano-cohere-transcribe - blazing fast, particularly for long-form audio. e.g. 18 mins audio transcribed in 2.36s1@misc{julian_mack_2026,
2 author = { Julian Mack and Ekagra Ranjan and Walter Beller-Morales and Bharat Venkitesh and Pierre Richemond },
3 title = { cohere-transcribe-03-2026 (Revision d96e814) },
4 year = 2026,
5 url = { https://huggingface.co/CohereLabs/cohere-transcribe-03-2026 },
6 doi = { 10.57967/hf/8653 },
7 publisher = { Hugging Face }
8}