A LoRA adapter for
Voxtral-Mini-3B-2507 that produces transcriptions enriched with inline expressive audio tags from the
ElevenLabs v3 tag set.
Evaluated on 50 held-out test samples. The finetuned model dramatically improves expressive tag generation while also improving raw transcription accuracy.
Custom synthetic dataset of 1,010 audio samples generated with ElevenLabs TTS v3:
1import torch
2from transformers import VoxtralForConditionalGeneration, AutoProcessor
3from peft import PeftModel
4
5repo_id = "mistralai/Voxtral-Mini-3B-2507"
6adapter_id = "YongkangZOU/evoxtral-lora"
7
8processor = AutoProcessor.from_pretrained(repo_id)
9base_model = VoxtralForConditionalGeneration.from_pretrained(
10 repo_id, dtype=torch.bfloat16, device_map="auto"
11)
12model = PeftModel.from_pretrained(base_model, adapter_id)
13
14# Transcribe audio with expressive tags
15inputs = processor.apply_transcription_request(
16 language="en",
17 audio=["path/to/audio.wav"],
18 format=["WAV"],
19 model_id=repo_id,
20 return_tensors="pt",
21)
22inputs = inputs.to(model.device, dtype=torch.bfloat16)
23
24outputs = model.generate(**inputs, max_new_tokens=512, do_sample=False)
25transcription = processor.batch_decode(
26 outputs[:, inputs.input_ids.shape[1]:], skip_special_tokens=True
27)[0]
28print(transcription)
29# [nervous] So... I was thinking maybe we could [clears throat] try that new restaurant downtown?
The model can produce any tag from the ElevenLabs v3 expressive tag set, including:
1@misc{evoxtral2026,
2 title={Evoxtral: Expressive Tagged Transcription with Voxtral},
3 author={Yongkang Zou},
4 year={2026},
5 url={https://huggingface.co/YongkangZOU/evoxtral-lora}
6}