fix: handle pyannote 4.x DiarizeOutput wrapper in diarize()

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-02 11:34:02 +02:00
parent 8ee11a31a1
commit 180fe43df7
2 changed files with 6 additions and 2 deletions
+3 -1
View File
@@ -20,7 +20,9 @@ class Diarizer:
async def diarize(self, wav_path: str) -> list[tuple[float, float, str]]: async def diarize(self, wav_path: str) -> list[tuple[float, float, str]]:
loop = asyncio.get_running_loop() loop = asyncio.get_running_loop()
pipeline = await loop.run_in_executor(None, self._load_pipeline) 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 [ return [
(turn.start, turn.end, speaker) (turn.start, turn.end, speaker)
for turn, _, speaker in annotation.itertracks(yield_label=True) for turn, _, speaker in annotation.itertracks(yield_label=True)
+3 -1
View File
@@ -21,7 +21,9 @@ def test_diarizer_returns_list_of_tuples(tmp_path):
(mock_turn_2, "B", "SPEAKER_01"), (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 import asyncio
from diarization import Diarizer from diarization import Diarizer