From 8448a214def68db4d231890b630d747e1f2ada58 Mon Sep 17 00:00:00 2001 From: Gabriel de Marmiesse Date: Tue, 14 Apr 2026 16:12:55 +0200 Subject: [PATCH 1/4] Make `max_speakers` configurable within the json config --- moshi/moshi/models/loaders.py | 2 ++ moshi/moshi/models/tts.py | 7 ++++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/moshi/moshi/models/loaders.py b/moshi/moshi/models/loaders.py index 6d494b2cb..21122d2e8 100644 --- a/moshi/moshi/models/loaders.py +++ b/moshi/moshi/models/loaders.py @@ -377,6 +377,8 @@ def get_moshi_lm( lm_kwargs = dict(lm_kwargs) assert lm_kwargs is not None + lm_kwargs.pop("max_speakers", None) + if "conditioners" in lm_kwargs: lm_kwargs["condition_provider"] = get_conditioner_provider( lm_kwargs["dim"], device, lm_kwargs diff --git a/moshi/moshi/models/tts.py b/moshi/moshi/models/tts.py index da5b4c730..b1ad3e895 100644 --- a/moshi/moshi/models/tts.py +++ b/moshi/moshi/models/tts.py @@ -31,7 +31,7 @@ DEFAULT_DSM_TTS_REPO = 'kyutai/tts-1.6b-en_fr' DEFAULT_DSM_TTS_VOICE_REPO = 'kyutai/tts-voices' PUBLIC_DATA_DSM_TTS_REPO = 'kyutai/tts-0.75b-en-public' - +DEFAULT_MAX_SPEAKERS = 5 @dataclass class TokenIds: @@ -377,7 +377,7 @@ class TTSModel: # The delay of the audio streams compared to the text stream. # Note that in addition, the acoustic tokens are delayed wrt the semantic ones. delay_steps: int - max_speakers: int = 5 + max_speakers: int = DEFAULT_MAX_SPEAKERS multistream: bool = False # The following params can be overriden to customize generation. @@ -415,6 +415,7 @@ def from_checkpoint_info(checkpoint_info: loaders.CheckpointInfo, lm=lm, mimi=mimi, tokenizer=tokenizer, voice_suffix=voice_suffix, voice_repo=voice_repo, machine=machine, delay_steps=delay_steps, multistream=multistream, + max_speakers=checkpoint_info.raw_config.get('max_speakers', DEFAULT_MAX_SPEAKERS), **kwargs) mimi_n_q = tts_model.n_q @@ -646,7 +647,7 @@ def make_condition_attributes( if voices: voice_tensor = None mask = None - for idx in range(5): + for idx in range(self.max_speakers): if idx < len(voices): if voices[idx].suffix != ".safetensors": raise ValueError(f"Voice file must be a .safetensors file, got {voices[idx]}") From 02d8a772f10e5474572d6d51ce2261b200b0e727 Mon Sep 17 00:00:00 2001 From: Gabriel de Marmiesse Date: Tue, 14 Apr 2026 17:31:31 +0200 Subject: [PATCH 2/4] IIII --- moshi/moshi/models/tts.py | 1 + 1 file changed, 1 insertion(+) diff --git a/moshi/moshi/models/tts.py b/moshi/moshi/models/tts.py index b1ad3e895..8a050ad8d 100644 --- a/moshi/moshi/models/tts.py +++ b/moshi/moshi/models/tts.py @@ -33,6 +33,7 @@ PUBLIC_DATA_DSM_TTS_REPO = 'kyutai/tts-0.75b-en-public' DEFAULT_MAX_SPEAKERS = 5 + @dataclass class TokenIds: """ From d4aec5753aa625bc5436e91c25490e553d5e6329 Mon Sep 17 00:00:00 2001 From: Gabriel de Marmiesse Date: Tue, 14 Apr 2026 18:00:25 +0200 Subject: [PATCH 3/4] Fix --- moshi/moshi/models/tts.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/moshi/moshi/models/tts.py b/moshi/moshi/models/tts.py index 8a050ad8d..62a129dd4 100644 --- a/moshi/moshi/models/tts.py +++ b/moshi/moshi/models/tts.py @@ -412,11 +412,12 @@ def from_checkpoint_info(checkpoint_info: loaders.CheckpointInfo, machine = StateMachine( token_ids=token_ids, second_stream_ahead=second_stream_ahead, max_padding=max_padding, initial_padding=initial_padding) + max_speakers = checkpoint_info.tts_config.get('max_speakers', DEFAULT_MAX_SPEAKERS) tts_model = TTSModel( lm=lm, mimi=mimi, tokenizer=tokenizer, voice_suffix=voice_suffix, voice_repo=voice_repo, machine=machine, delay_steps=delay_steps, multistream=multistream, - max_speakers=checkpoint_info.raw_config.get('max_speakers', DEFAULT_MAX_SPEAKERS), + max_speakers=max_speakers, **kwargs) mimi_n_q = tts_model.n_q From 0f05f6cae353a84ef1521a7ced231b9bfb5e475c Mon Sep 17 00:00:00 2001 From: Gabriel de Marmiesse Date: Tue, 14 Apr 2026 18:01:37 +0200 Subject: [PATCH 4/4] III --- moshi/moshi/models/loaders.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/moshi/moshi/models/loaders.py b/moshi/moshi/models/loaders.py index 21122d2e8..6d494b2cb 100644 --- a/moshi/moshi/models/loaders.py +++ b/moshi/moshi/models/loaders.py @@ -377,8 +377,6 @@ def get_moshi_lm( lm_kwargs = dict(lm_kwargs) assert lm_kwargs is not None - lm_kwargs.pop("max_speakers", None) - if "conditioners" in lm_kwargs: lm_kwargs["condition_provider"] = get_conditioner_provider( lm_kwargs["dim"], device, lm_kwargs