Files
livekit--agents/tests/test_plugin_fishaudio_tts.py
2026-07-13 13:39:38 +08:00

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)