mirror of
https://github.com/open-jarvis/OpenJarvis.git
synced 2026-07-29 18:40:38 +00:00
79 lines
2.5 KiB
Python
79 lines
2.5 KiB
Python
"""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
|