diff --git a/pecha_api/plans/audio/tts_service.py b/pecha_api/plans/audio/tts_service.py index 7ddd06e7..a656db0e 100644 --- a/pecha_api/plans/audio/tts_service.py +++ b/pecha_api/plans/audio/tts_service.py @@ -5,9 +5,6 @@ from pecha_api.plans.audio.monlam_tts_service import generate_monlam_tts_audio from pecha_api.plans.plans_enums import PlanAudioType -SUPPORTED_TTS_LANGUAGES = {"en", "bo"} - - def _normalize_language(language: str) -> str: return (language or "en").strip().lower() @@ -22,10 +19,6 @@ def generate_tts_audio( raise ValueError("Content cannot be empty") normalized_language = _normalize_language(language) - if normalized_language not in SUPPORTED_TTS_LANGUAGES: - raise ValueError( - f"Unsupported language for TTS: {language}. Supported: {', '.join(sorted(SUPPORTED_TTS_LANGUAGES))}" - ) if normalized_language == "bo": return generate_monlam_tts_audio(content, voice_name=voice_name) diff --git a/tests/plans/audio/test_tts_service.py b/tests/plans/audio/test_tts_service.py index e6a7c0ff..ec3884b1 100644 --- a/tests/plans/audio/test_tts_service.py +++ b/tests/plans/audio/test_tts_service.py @@ -68,13 +68,21 @@ def test_generate_tts_audio_rejects_empty_content(): generate_tts_audio(content=" ", audio_type=PlanAudioType.RECITATION) -def test_generate_tts_audio_rejects_unsupported_language(): - with pytest.raises(ValueError, match="Unsupported language for TTS"): - generate_tts_audio( - content="Hello", - audio_type=PlanAudioType.RECITATION, - language="zh", - ) +@patch("google.genai.Client") +@patch("pecha_api.plans.audio.tts_service.get", return_value="test-api-key") +def test_generate_tts_audio_routes_non_tibetan_languages_to_gemini(mock_get, mock_client_cls): + audio_data = b"\x00\x01\x02\x03" + _configure_gemini_client(mock_client_cls, _build_gemini_audio_response(audio_data=audio_data)) + + result = generate_tts_audio( + content="你好", + audio_type=PlanAudioType.RECITATION, + language="zh", + ) + + assert result[:4] == b"RIFF" + assert result.endswith(audio_data) + mock_client_cls.assert_called_once() @patch("pecha_api.plans.audio.tts_service.generate_monlam_tts_audio") diff --git a/tests/plans/audio/test_tts_test_views.py b/tests/plans/audio/test_tts_test_views.py index 4941fbd7..aedfd45e 100644 --- a/tests/plans/audio/test_tts_test_views.py +++ b/tests/plans/audio/test_tts_test_views.py @@ -44,13 +44,25 @@ def test_preview_tts_returns_502_for_runtime_error(mock_generate): @patch( "pecha_api.plans.audio.tts_test_views.generate_tts_audio", - side_effect=ValueError("Unsupported language for TTS: zh"), + return_value=b"RIFF" + b"\x00" * 40, +) +def test_preview_tts_returns_wav_for_non_tibetan_language(mock_generate): + response = _post_tts_preview(language="zh", type="TEXT_READING") + + assert response.status_code == 200 + assert response.headers["content-type"] == "audio/wav" + mock_generate.assert_called_once() + + +@patch( + "pecha_api.plans.audio.tts_test_views.generate_tts_audio", + side_effect=ValueError("Content cannot be empty"), ) def test_preview_tts_returns_400_for_validation_error(mock_generate): - response = _post_tts_preview(language="zh") + response = client.post("/preview", json={"text": " ", "language": "en"}) assert response.status_code == 400 - assert "Unsupported language" in response.json()["detail"] + assert "Content cannot be empty" in response.json()["detail"] @patch(