90 lines
2.8 KiB
Python
90 lines
2.8 KiB
Python
"""Tests for Fish Audio TTS plugin configuration and request building."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import pytest
|
|
|
|
from livekit.agents.types import NOT_GIVEN
|
|
|
|
pytestmark = pytest.mark.plugin("fishaudio")
|
|
|
|
|
|
def test_default_model_is_s2_1_pro():
|
|
"""A bare TTS() defaults to the s2.1-pro model."""
|
|
from livekit.plugins.fishaudio import TTS
|
|
|
|
tts = TTS(api_key="test-key")
|
|
assert tts.model == "s2.1-pro"
|
|
|
|
|
|
def test_model_variants_accepted():
|
|
"""s1, s2-pro, and s2.1-pro are all accepted."""
|
|
from livekit.plugins.fishaudio import TTS
|
|
|
|
for model in ("s1", "s2-pro", "s2.1-pro"):
|
|
assert TTS(api_key="test-key", model=model).model == model
|
|
|
|
|
|
def test_prosody_omitted_by_default():
|
|
"""Without speed/volume the request sends prosody=None (unchanged default)."""
|
|
from livekit.plugins.fishaudio.tts import _build_tts_request
|
|
|
|
tts = TTS_opts()
|
|
assert tts.speed is NOT_GIVEN
|
|
assert tts.volume is NOT_GIVEN
|
|
assert _build_tts_request(tts, text="hi")["prosody"] is None
|
|
|
|
|
|
def test_speed_sets_prosody():
|
|
"""speed populates only prosody.speed."""
|
|
from livekit.plugins.fishaudio.tts import _build_tts_request
|
|
|
|
assert _build_tts_request(TTS_opts(speed=0.8), text="hi")["prosody"] == {"speed": 0.8}
|
|
|
|
|
|
def test_volume_sets_prosody():
|
|
"""volume populates only prosody.volume."""
|
|
from livekit.plugins.fishaudio.tts import _build_tts_request
|
|
|
|
assert _build_tts_request(TTS_opts(volume=-3.0), text="hi")["prosody"] == {"volume": -3.0}
|
|
|
|
|
|
def test_speed_and_volume_set_prosody():
|
|
"""speed and volume together populate both prosody fields."""
|
|
from livekit.plugins.fishaudio.tts import _build_tts_request
|
|
|
|
prosody = _build_tts_request(TTS_opts(speed=1.2, volume=-3.0), text="hi")["prosody"]
|
|
assert prosody == {"speed": 1.2, "volume": -3.0}
|
|
|
|
|
|
def test_update_options_sets_speed_and_volume():
|
|
"""update_options forwards speed/volume onto the request."""
|
|
from livekit.plugins.fishaudio import TTS
|
|
from livekit.plugins.fishaudio.tts import _build_tts_request
|
|
|
|
tts = TTS(api_key="test-key")
|
|
assert _build_tts_request(tts._opts, text="hi")["prosody"] is None
|
|
|
|
tts.update_options(speed=0.9, volume=2.0)
|
|
assert _build_tts_request(tts._opts, text="hi")["prosody"] == {"speed": 0.9, "volume": 2.0}
|
|
|
|
|
|
def TTS_opts(**overrides):
|
|
"""Build a _TTSOptions with sensible test defaults, overriding as needed."""
|
|
from livekit.plugins.fishaudio.tts import DEFAULT_BASE_URL, DEFAULT_MODEL, _TTSOptions
|
|
|
|
opts = {
|
|
"model": DEFAULT_MODEL,
|
|
"output_format": "wav",
|
|
"sample_rate": 24000,
|
|
"voice_id": NOT_GIVEN,
|
|
"base_url": DEFAULT_BASE_URL,
|
|
"api_key": "test-key",
|
|
"latency_mode": "balanced",
|
|
"chunk_length": 100,
|
|
"speed": NOT_GIVEN,
|
|
"volume": NOT_GIVEN,
|
|
}
|
|
opts.update(overrides)
|
|
return _TTSOptions(**opts)
|