diff --git a/diarization.py b/diarization.py index fba962c..ade0e39 100644 --- a/diarization.py +++ b/diarization.py @@ -20,7 +20,9 @@ class Diarizer: async def diarize(self, wav_path: str) -> list[tuple[float, float, str]]: loop = asyncio.get_running_loop() pipeline = await loop.run_in_executor(None, self._load_pipeline) - annotation = await loop.run_in_executor(None, lambda: pipeline(wav_path)) + result = await loop.run_in_executor(None, lambda: pipeline(wav_path)) + # pyannote 4.x returns DiarizeOutput; older versions return Annotation directly + annotation = getattr(result, "speaker_diarization", result) return [ (turn.start, turn.end, speaker) for turn, _, speaker in annotation.itertracks(yield_label=True) diff --git a/tests/test_diarization.py b/tests/test_diarization.py index c3b2908..1becbf6 100644 --- a/tests/test_diarization.py +++ b/tests/test_diarization.py @@ -21,7 +21,9 @@ def test_diarizer_returns_list_of_tuples(tmp_path): (mock_turn_2, "B", "SPEAKER_01"), ] - mock_pipeline = MagicMock(return_value=mock_annotation) + mock_output = MagicMock() + mock_output.speaker_diarization = mock_annotation + mock_pipeline = MagicMock(return_value=mock_output) import asyncio from diarization import Diarizer