Scriptorium / tests /test_omnivoice_adapter.py
mattkevan's picture
add modal endpoint and magpietts
cd0ff97
Raw
History Blame Contribute Delete
2.31 kB
from pathlib import Path
import numpy as np
from backend.omnivoice_adapter import OmniVoiceAdapter
from backend.types import VoiceConfig
class FakeModel:
def __init__(self) -> None:
self.generate_calls = []
self.clone_prompt_calls = []
def create_voice_clone_prompt(self, *, ref_audio, ref_text=None):
self.clone_prompt_calls.append({"ref_audio": ref_audio, "ref_text": ref_text})
return {"prompt": "cached"}
def generate(self, **kwargs):
self.generate_calls.append(kwargs)
return [np.zeros(24000, dtype=np.float32)]
def test_omnivoice_adapter_uses_stable_generation_config_for_designed_voice(tmp_path: Path) -> None:
adapter = OmniVoiceAdapter()
fake_model = FakeModel()
adapter._model = fake_model
adapter._backend = "omnivoice"
adapter.synthesize(
text="Chapter one text.",
output_path=tmp_path / "chapter.wav",
voice_config=VoiceConfig(mode="design", design_prompt="male, elderly, low pitch, british accent"),
diffusion_steps=32,
speed=1.0,
)
generation_config = fake_model.generate_calls[0]["generation_config"]
assert generation_config.position_temperature == 0.0
assert generation_config.class_temperature == 0.0
def test_omnivoice_adapter_reuses_cached_clone_prompt_across_chapters(tmp_path: Path) -> None:
adapter = OmniVoiceAdapter()
fake_model = FakeModel()
adapter._model = fake_model
adapter._backend = "omnivoice"
voice = VoiceConfig(mode="clone", sample_path="/tmp/sample.wav", reference_text="Reference speech")
adapter.synthesize(
text="Chapter one text.",
output_path=tmp_path / "chapter-1.wav",
voice_config=voice,
diffusion_steps=32,
speed=1.0,
)
adapter.synthesize(
text="Chapter two text.",
output_path=tmp_path / "chapter-2.wav",
voice_config=voice,
diffusion_steps=32,
speed=1.0,
)
assert len(fake_model.clone_prompt_calls) == 1
assert fake_model.generate_calls[0]["voice_clone_prompt"] == {"prompt": "cached"}
assert fake_model.generate_calls[1]["voice_clone_prompt"] == {"prompt": "cached"}
assert "ref_audio" not in fake_model.generate_calls[0]
assert "ref_audio" not in fake_model.generate_calls[1]