"""Tests for Gradium STT plugin configuration and behavior.""" from __future__ import annotations import json from unittest.mock import MagicMock, patch import pytest pytestmark = pytest.mark.plugin("gradium") def test_stt_default_language(): """STT defaults to English.""" from livekit.plugins.gradium import STT stt = STT(api_key="test-key") assert stt._opts.language == "en" def test_stt_custom_language(): """STT accepts custom language.""" from livekit.plugins.gradium import STT stt = STT(api_key="test-key", language="fr") assert stt._opts.language == "fr" def test_stream_language_overrides_stream_options(): """stream language overrides the copied stream config.""" from livekit.plugins.gradium import STT stt = STT(api_key="test-key", language="fr", http_session=MagicMock()) def _fake_create_task(coro, *args, **kwargs): coro.close() task = MagicMock() return task with patch("livekit.agents.stt.stt.asyncio.create_task", side_effect=_fake_create_task): stream = stt.stream(language="de") assert stream._opts.language == "de" assert stt._opts.language == "fr" @pytest.mark.asyncio async def test_speech_stream_sends_language_in_json_config(): """SpeechStream sends language in setup json_config.""" from livekit.agents import DEFAULT_API_CONNECT_OPTIONS, LanguageCode from livekit.plugins.gradium import STT from livekit.plugins.gradium.stt import SpeechStream, STTOptions sent_messages: list[str] = [] class FakeWebSocket: async def send_str(self, message: str) -> None: sent_messages.append(message) class FakeSession: async def ws_connect(self, url, headers): return FakeWebSocket() stt = STT(api_key="test-key") opts = STTOptions(language=LanguageCode("pt"), temperature=0.3) def _fake_create_task(coro, *args, **kwargs): coro.close() task = MagicMock() return task with patch("livekit.agents.stt.stt.asyncio.create_task", side_effect=_fake_create_task): stream = SpeechStream( stt=stt, opts=opts, conn_options=DEFAULT_API_CONNECT_OPTIONS, api_key="test-key", model_endpoint="wss://api.gradium.ai/api/speech/asr", model_name="default", http_session=FakeSession(), ) await stream._connect_ws() setup_msg = json.loads(sent_messages[0]) assert setup_msg["json_config"] == {"language": "pt", "temp": 0.3}