"""Tests for Faster-Whisper speech backend.""" from unittest.mock import MagicMock, patch import pytest from openjarvis.core.registry import SpeechRegistry from openjarvis.speech.faster_whisper import FasterWhisperBackend @pytest.fixture(autouse=True) def _register_faster_whisper(): """Re-register after any registry clear.""" if not SpeechRegistry.contains("faster-whisper"): SpeechRegistry.register_value("faster-whisper", FasterWhisperBackend) def test_faster_whisper_backend_registers(): """Backend registers itself in SpeechRegistry.""" assert SpeechRegistry.contains("faster-whisper") def test_faster_whisper_transcribe(): """Transcribe returns a TranscriptionResult.""" from openjarvis.speech._stubs import TranscriptionResult mock_model = MagicMock() mock_segment = MagicMock() mock_segment.text = " Hello world" mock_segment.start = 0.0 mock_segment.end = 1.2 mock_segment.avg_logprob = -0.3 mock_info = MagicMock() mock_info.language = "en" mock_info.language_probability = 0.95 mock_info.duration = 1.5 mock_model.transcribe.return_value = ([mock_segment], mock_info) with patch( "openjarvis.speech.faster_whisper.WhisperModel", return_value=mock_model, ): from openjarvis.speech.faster_whisper import FasterWhisperBackend backend = FasterWhisperBackend(model_size="base", device="cpu") result = backend.transcribe(b"fake audio bytes") assert isinstance(result, TranscriptionResult) assert result.text == "Hello world" assert result.language == "en" assert result.duration_seconds == 1.5 def test_faster_whisper_health_no_model(): """Health returns False before model is loaded.""" with patch( "openjarvis.speech.faster_whisper.WhisperModel", new=None, ): from openjarvis.speech.faster_whisper import FasterWhisperBackend backend = FasterWhisperBackend.__new__(FasterWhisperBackend) backend._model = None assert backend.health() is False def test_faster_whisper_supported_formats(): """Backend supports standard audio formats.""" with patch("openjarvis.speech.faster_whisper.WhisperModel"): from openjarvis.speech.faster_whisper import FasterWhisperBackend backend = FasterWhisperBackend.__new__(FasterWhisperBackend) formats = backend.supported_formats() assert "wav" in formats assert "mp3" in formats assert "webm" in formats