Downloads · 30 days
16
15% of all-time downloads
FlexiSLM/FlexiSLM-7B-Stage2
FlexiSLM-7B-Stage2 is a text-to-speech model from FlexiSLM. Use it when you need text read aloud. It is set up for transformers. The card lists the license as apache-2.0.
Stage 2 checkpoint of FlexiSLM-7B, a spoken language model with dynamic and controllable frame rates on both speech input and output.
Downloads · 30 days
16
15% of all-time downloads
All-time downloads
110
Public
Parameters
8.4B
51.7 GB on disk
Likes
3
Public
Click a slice to open those files.
.safetensors16.8 GB · 100%
From the Hugging Face model README
Stage 2 checkpoint of FlexiSLM-7B, a spoken language model with dynamic and controllable frame rates on both speech input and output.
Install from the code repo, then run with auto_download=True. On first run this downloads this Stage 2 checkpoint plus the shared Qwen2.5-Omni audio encoder, SenseVoice, FlexiCodec, flow-matching decoder, and vocoder into models/.
git clone --recurse-submodules https://github.com/AmphionTeam/FlexiSLM.git
cd FlexiSLM
pip install -r requirements.txt
from pathlib import Path
import soundfile as sf
import torch
from src.inference_flexislm import FlexiSLMInferenceConfig, FlexiSLMInference
config = FlexiSLMInferenceConfig(
auto_download=True,
checkpoint="stage2_7B", # this repo
use_flow_matching_decoder=True,
flow_matching_prompt_audio_path=str(Path("examples/input.wav").resolve()),
enable_flexible_framerate=True,
input_framerate=8.0,
default_framerate=8.0,
decode_audio=True,
torch_dtype="bfloat16",
attn_implementation="flash_attention_2",
)
engine = FlexiSLMInference(config, device="cuda:0")
def save_audio(result, output_path):
waveform = result.get("audio")
if waveform is None:
raise RuntimeError("The model did not return decoded audio")
if torch.is_tensor(waveform):
waveform = waveform.detach().float().cpu().numpy()
sf.write(Path(output_path), waveform.squeeze(), 16_000)
# Text-to-speech
result = engine.generate_tts(
sentence="FlexiSLM supports controllable speech generation.",
framerate=8.0,
)
save_audio(result, "tts.wav")
# ASR
result = engine.generate_from_audio(
audio_path="examples/input.wav",
text_query="Please transcribe the audio.",
framerate=8.0,
output_text_only=True,
)
print(result["text"])
# Audio QA
result = engine.generate_from_audio(
audio_path="examples/question.wav",
text_query="",
framerate=8.0,
output_text_only=True,
)
print(result["text"])
# Speech-to-speech
result = engine.generate_from_audio(
audio_path="examples/input.wav",
text_query="",
framerate=8.0,
output_text_only=False,
)
save_audio(result, "s2s.wav")
MODEL_ROOT="$PWD/models"
hf download FlexiSLM/FlexiSLM-7B-Stage2 --local-dir "$MODEL_ROOT/FlexiSLM-7B-Stage2"
# Shared auxiliary files (required for inference)
hf download FlexiSLM/Qwen2_5-Omni-Audio_Encoder --local-dir "$MODEL_ROOT/Qwen2_5-Omni-Audio_Encoder"
hf download FunAudioLLM/SenseVoiceSmall --local-dir "$MODEL_ROOT/SenseVoiceSmall"
hf download jiaqili3/flexicodec \
12hz_v1_half_config.yaml \
nartts_flexicodec_only.safetensors \
nartts.safetensors \
--local-dir "$MODEL_ROOT/FlexiCodec"
hf download amphion/dualcodec-tts vocos_emilia.safetensors \
--local-dir "$MODEL_ROOT/FlexiCodec"
Then point FlexiSLMInferenceConfig at the local paths (checkpoint="stage2_7B", model_path=models/FlexiSLM-7B-Stage2, plus encoder/codec paths). See the code README Inference section for the full config block.
After downloading weights, use the committed examples:
python -m src.infer examples/infer_7b.yaml
Set engine.config.checkpoint: stage2_7B and engine.config.model_path: models/FlexiSLM-7B-Stage2, or use auto_download: true.
A single Stage 2 model can be steered between about 12.5 Hz and 4.0 Hz without retraining via input_framerate / default_framerate / per-call framerate.
@misc{li2026flexislmdynamiccontrollableframe,
title={FlexiSLM: A Dynamic and Controllable Frame Rate Spoken Language Model},
author={Jiaqi Li and Chaoren Wang and Xiaohai Tian and Mingjie Chen and Xinyu Liang and Xu Li and Yufan Lin and Junwen Qiu and Jun Zhang and Lu Lu and Haizhou Li and Zhizheng Wu},
year={2026},
eprint={2606.31247},
archivePrefix={arXiv},
primaryClass={cs.SD},
url={https://arxiv.org/abs/2606.31247},
}